我正在尝试创建一个关于人们如何从一个位置移动到另一个位置的两个不同参数的序列。我有以下信息
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
答案 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