首页 > 解决方案 > 按多个组选择多个数据帧上的值

问题描述

我正在尝试运行一个函数,该函数从多个数据帧中获取同一时间的 value1、value2、value3 和名称。output <- function(value1, value2, value3)例如:

DF1:
time       name      value1
Jan 1990      1      4
Feb 1990      1      2
Mar 1990      1      3
Jan 1990      2      2
Feb 1991      2      1
DF2:
time       name      value2
Jan 1990      1      4
Feb 1990      1      2
Mar 1990      1      3
Jan 1990      2      2
Feb 1991      2      1
DF3:
time       name      value3
Jan 1990      1      4
Feb 1990      1      2
Mar 1990      1      3
Jan 1990      2      2
Feb 1991      2      1

我应该使用 join 然后在每一行上应用吗?

output
time       name    output 
Jan 1990      1      4
Feb 1990      1      2
Mar 1990      1      3
Jan 1990      2      2
Feb 1991      2      1

标签: rdplyrzoo

解决方案


采用 -

选项 1:dplyr 库(dplyr)

output <- inner_join(inner_join(df1, df2, by=c("time", "name")), 
                 df3, by=c("time", "name"))

选项2:plyr

library(plyr)
join_all(list(df1,df2,df3), by=c('time','name'), type='inner')           

选项 3:基础 R 合并+减少

使用merge+ reduce- 致 @akrun

Reduce(function(...) merge(..., by=c("time","name"), all.x=TRUE), list(df1,df2,df3))

输出

      time name value1
1 Jan 1990    1      4
2 Feb 1990    1      2
3 Mar 1990    1      3
4 Jan 1990    2      2
5 Feb 1991    2      1

然后,您可以根据需要重命名列。


推荐阅读