5

我有 4 个数据框,每个数据框都是列表中的索引。我想将它们完全组合为一个数据框。在数学的集合语言中,将其作为行名上的并集是最有意义的。所以我可能有这样的事情:

U <- union(dfSub[[1]], dfSub[[2]], dfSub[[3]], dfSub[[4]])

union函数的问题在于它仅对向量进行操作。我怎样才能让它在数据帧上工作?

  1. 我怎样才能把它翻译成R?
  2. 有没有更好的方法来达到预期的结果?

编辑:如何在联合后保留行名?

4

2 回答 2

15

首先,将它们绑定在一起:

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)
于 2013-05-06T22:29:15.420 回答
-2

您可以将数据框与合并功能结合起来。由于您有多个数据框,您可以使用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
于 2013-05-06T22:38:12.290 回答