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

在R中沿两个感兴趣的变量排序,r,dplyr,reshape2,tidyr,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, 20

我试图根据两个不同的参数创建一个序列,关于人们如何从一个位置移动到另一个位置。我有以下资料

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)
我想要

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

如果我理解正确,您可以通过扩展数据帧来完成您的数据帧,对于每个
name
location
组合,从最小的
start\u yr
到最大的
end\u yr
,然后按
name
分组并按
start\u yr
排序,使用
lag()
检查位置是否发生了变化:

如果给定名称没有以前的位置,则返回
NA
;如果位置相同,则返回
0
;如果位置更改,则返回
1

#Source: local data frame [14 x 5]
#Groups: name [3]
#
#     name location start_yr end_yr  move
#   (fctr)   (fctr)    (dbl)  (dbl) (int)
#1    John   London     2012   2013    NA
#2    John   London     2012   2013     0
#3    John   London     2013     NA     0
#4    John  Newyork     2014   2015     1
#5    John  Newyork     2015     NA     0
#6  Robert   London     2012   2013    NA
#7  Robert   London     2013     NA     0
#8  Robert    Paris     2013   2015     1
#9  Robert    Paris     2013   2015     0
#10 Robert    Paris     2014     NA     0
#11 Robert    Paris     2015     NA     0
#12    Sam  Houston     2014   2015    NA
#13    Sam  Houston     2014   2015     0
#14    Sam  Houston     2015     NA     0

我不知道如何使用初始数据获得所需的输出。我试图按照顺序创建一个新的年度变量curr_yr。所以我可以通过将start_yr和curr_yr相加来创建一个year变量。你怎么知道约翰是2012年搬进来的?事实上你是对的。2012年的第一步是0,因为我没有之前的数据,但纽约一步是正确的。有意义吗?我说的
end\u yr
在这里也不重要,对吗?你只想知道约翰是否在某一年的年初改变了城市,与前一年相比?谢谢!我怎么在那里创建这个变量?我是说移动。我可以在窗格中看到。我在数据框架中看不到这一点太好了!我还需要一个“年”变量,它是一个增量变量,用于折叠变量。有什么想法吗?我指的是一个叫做curr_yr的变量,对于每个人,从开始到年底,位置组合基本上都会增加1 w.r.t。
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))
#Source: local data frame [14 x 5]
#Groups: name [3]
#
#     name location start_yr end_yr  move
#   (fctr)   (fctr)    (dbl)  (dbl) (int)
#1    John   London     2012   2013    NA
#2    John   London     2012   2013     0
#3    John   London     2013     NA     0
#4    John  Newyork     2014   2015     1
#5    John  Newyork     2015     NA     0
#6  Robert   London     2012   2013    NA
#7  Robert   London     2013     NA     0
#8  Robert    Paris     2013   2015     1
#9  Robert    Paris     2013   2015     0
#10 Robert    Paris     2014     NA     0
#11 Robert    Paris     2015     NA     0
#12    Sam  Houston     2014   2015    NA
#13    Sam  Houston     2014   2015     0
#14    Sam  Houston     2015     NA     0