合并来自全国调查的两个数据框架与专家组而不是两个不同年份的专家组(r)

时间:2016-09-08 10:51:08

标签: r merge

我试图在网站上搜索,但我找不到问题的答案;如果已有,请写下链接。

我从全国调查中得到两个数据框:每年我都有一些家庭已经接受过采访,而另一些家庭则是新的。我想合并数据帧,以便只有两个数据帧中存在的系列并匹配它们,以便将2014年的值连续存储,并为每个人提供下一个的2012年值(为了简洁起见我省略了调查中出现的其他社会变量。)

例如:df1和df2

> df1 <- data.frame(nquest=c(173, 526, 1066, 1066), nord=c(1,1,1,2), year=c(2014, 2014, 2014, 2014))
> structure(df1)
   nquest nord  year
1    173    1   2014
2    526    1   2014
3   1066    1   2014
4   1066    2   2014

> df2 <- data.frame(nquest=c(173, 526, 3456, 3456), nord=c(1,1,1,2), year=c(2012, 2012, 2012, 2012))
> structure(df2)
  nquest nord year
1    173    1 2012
2    526    1 2012
3   3456    1 2012
4   3456    2 2012

其中nquest是家庭的编号,而nord是家庭的组成部分(例如,1位父亲,2位母亲)。

我想以这种方式合并它们:

> df <- data.frame(nquest=c(173, 173, 526,526), nord=c(1,1,1,1), year=c(2014, 2012, 2014, 2012))
> structure(df)
  nquest nord year
1    173    1 2014
2    173    1 2012
3    526    1 2014
4    526    1 2012

我尝试合并它们:

tot <- merge (df1, df2, by=c("nquest", "nord")
structure(tot)
  nquest nord  year.x  year.y
1    173    1   2014    2012
2    526    1   2014    2012

我尝试了rbind函数:

> tot <- rbind(s, df2)
> structure(tot)
  nquest nord year
1    173    1  201
2    526    1 2014
3   1066    1 2014
4   1066    2 2014
5    173    1 2012
6    526    1 2012
7   3456    1 2012
8   3456    2 2012

谢谢

1 个答案:

答案 0 :(得分:1)

这是一种使用“dplyr”的方法,虽然可能有更好的方法进行过滤

bind_rows(df1, df2) %>% 
  filter( nquest %in% df1$nquest & nquest %in% df2$nquest) %>%
  arrange(nquest, desc(year))

指定年份的“安排”功能的第二个条件在这种情况下不是必需的,但是我把它放在那里以实现完整性