【问题标题】:Sequencing along two variables of interest in R沿 R 中两个感兴趣的变量排序
【发布时间】:2016-05-19 22:10:38
【问题描述】:

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

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

【问题讨论】:

  • 我看不到您如何使用初始数据获得所需的输出
  • 我试图按顺序创建一个新的变量 curr_yr 用于年份。这样我就可以通过添加 start_yr 和 curr_yr 来创建年份变量。
  • 让我重新表述一下。你怎么知道约翰搬进来2012
  • 其实你是对的。 2012 年的第一步是 0,因为我没有先前的数据,但纽约的数据是正确的。有意义吗?
  • 我说end_yr 在这里也无所谓吗?您只想知道 John 在给定年份的年初与上一年相比是否更换了城市?

标签: r dplyr reshape2 tidyr


【解决方案1】:

如果我理解正确,您可以通过扩展它来完成您的数据框,对于每个 namelocation 组合,从最小 start_yr 到最大 end_yr,然后按 name 分组并按 @ 排序987654326@ 使用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如果它改变:

#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 的变量,对于每个人,位置组合,它基本上增加 1 w.r.t start_yr 直到年底。
猜你喜欢
  • 1970-01-01
  • 2011-08-10
  • 1970-01-01
  • 2022-01-13
  • 2012-02-22
  • 2013-03-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多