在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