沿着R中感兴趣的两个变量排序

时间:2016-05-19 22:10:38

标签: r dplyr reshape2 tidyr

我正在尝试创建一个关于人们如何从一个位置移动到另一个位置的两个不同参数的序列。我有以下信息

name<- c("John", "John", "John", "Sam","Sam", "Robert", "Robert","Robert")
location<- c("London", "London", "Newyork", "Houston", "Houston", "London", "Paris","Paris")
start_yr<- c(2012, 2012, 2014, 2014, 2014,2012,2013, 2013)
end_yr<- c(2013, 2013, 2015, 2015,  2015, 2013, 2015, 2015)

df<- data.frame(name,location,start_yr, end_yr)

我需要seq_along名称和位置,并创建一年的转换变量,以了解此人是否已在该年度移动。我试过这个,但效果不好。我觉得奇怪的年份意味着名称列有时不会从1开始。有关如何解决这个问题的任何建议吗?

ave(df$name,df$location, FUN = seq_along)

我想

   name location move year
   John London   1    2012
   John London   0    2013
   John Newyork  1    2014
   John Newyork  0    2015

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您可以通过扩展数据框来完成每个name&amp;从最低location到最高start_yr的{​​{1}}组合,然后按end_yr分组,并按name排序,以使用start_yr检查位置是否已更改:

lag()

如果,对于给定名称,没有以前的位置,library(dplyr) library(tidyr) df %>% group_by(name, location) %>% complete(start_yr = full_seq(min(start_yr):max(end_yr), 1)) %>% group_by(name) %>% arrange(start_yr) %>% mutate(move = +(lag(location) != location)) 如果位置相同,则返回NA,如果更改,则返回0

1