我有 4 个数据框,每个数据框都是列表中的索引。我想将它们完全组合为一个数据框。在数学的集合语言中,将其作为行名上的并集是最有意义的。所以我可能有这样的事情:
U <- union(dfSub[[1]], dfSub[[2]], dfSub[[3]], dfSub[[4]])
该union
函数的问题在于它仅对向量进行操作。我怎样才能让它在数据帧上工作?
- 我怎样才能把它翻译成R?
- 有没有更好的方法来达到预期的结果?
编辑:如何在联合后保留行名?
首先,将它们绑定在一起:
df.cat <- rbind(dfSub[[1]], dfSub[[2]], dfSub[[3]], dfSub[[4]])
或更好:
df.cat <- do.call(rbind, dfSub[1:4])
第一步要求所有 data.frames 具有相同的列名。如果不是这种情况,那么您可能对包中的rbind.fill
功能感兴趣plyr
:
library(plyr)
df.cat <- rbind.fill(dfSub[1:4])
然后,如果您需要删除重复项(作为集合联合):
df.union <- unique(df.cat)
您可以将数据框与合并功能结合起来。由于您有多个数据框,您可以使用Reduce一次合并它们。
merged.data <- Reduce(function(...) merge(...), list(dfSub[[1]], dfSub[[2]], dfSub[[3]], dfSub[[4]])
举个例子:
> people <- c('Bob', 'Jane', 'Pat')
> height <- c(72, 64, 68)
> weight <- c(220, 130, 150)
> age <- c(45, 32, 35)
> height.data <- data.frame(people, height)
> weight.data <- data.frame(people, weight)
> age.data <- data.frame(people, age)
> height.data
people height
1 Bob 72
2 Jane 64
3 Pat 68
> weight.data
people weight
1 Bob 220
2 Jane 130
3 Pat 150
> age.data
people age
1 Bob 45
2 Jane 32
3 Pat 35
> Reduce(function(...) merge(...), list(height.data, weight.data, age.data))
people height weight age
1 Bob 72 220 45
2 Jane 64 130 32
3 Pat 68 150 35