【发布时间】:2015-03-12 04:27:48
【问题描述】:
我有三个结构相似的数据框,但有一个不同的列名和不同的行数。
> a
ID count alpha
1 207 1 1
2 351 1 1
3 372 1 1
4 595 4 1
5 596 1 1
6 652 1 1
> b
ID count beta
1 207 1 1
2 351 1 1
3 372 1 1
4 1024 6 1
> c
ID count zeta
1 207 4 1
2 351 1 1
3 372 1 1
4 595 2 1
我需要创建一个包含两者(id、count、alpha、beta)的所有列的新数据框,同时输出 count 的总和。如果一个 ID 只出现在一个数据框中,它应该在相应的列中输出 0。期望的输出如下:
> abc
ID count alpha beta zeta
1 207 6 1 1 1
2 351 3 1 1 1
3 372 3 1 1 1
4 595 6 1 0 1
5 596 1 1 0 0
6 652 1 1 0 0
7 1024 6 0 1 0
我在 a 和 b 上尝试了 merge() 并得到了这个输出:
> merge(a, b, by=intersect(names(a),names(b)), all=TRUE, sort=TRUE)
id count alpha beta
1 207 1 1 1
2 351 1 1 1
3 372 1 1 1
4 595 4 1 NA
5 596 1 1 NA
6 652 1 1 NA
7 1024 6 NA 1
我可以接受 0 是 NA,但我对这个输出有两个主要问题:
(1) 计数列不求和
(2) merge() 仅适用于 2 个数据帧,实际上我还有更多(比如 10 个)
欢迎任何建议。
【问题讨论】:
-
为什么不将聚合作为下一步?
-
我已经丢失了 $count 中包含的信息,不是吗? 困惑
-
您可以编写另一个合并函数:
merge2 <- function(l, ...) Reduce(function(x, y) merge(x, y, ...), l)其中l是数据框或矩阵的列表。我也同意你不需要一步完成所有事情 -
哦。我明白你指的是什么。也许使用接受不同列的 rbind 函数之一,然后聚合该输出。
-
您能否添加更多关于您希望如何处理“alpha”和“beta”列的详细信息。不同的
data.frames 中是否有不同的列?有些人同时拥有“alpha”和“beta”吗?
标签: r merge dataframe aggregate