基于另一个数据框从一个数据框聚合值

时间:2016-02-01 18:27:03

标签: r merge dataframe aggregate

我为一个大问题而奋斗,我找不到一种有效的解决方法。我有两个(大)数据框,有一个像

这样的公共列
#  DT1                   DT2
#  I  A B             I  C  D
# id1 1 10           id1 1  a
# id2 2 20           id2 2  a
# id3 3 30           id3 2  b
# id4 4 40           id4 1  a
# id5 5 50           id5 1  c
# id6 6 60           id6 1  c
# id7 7 70           id7 2  c
# id8 8 80           id8 2  b

这个想法是创建一个数据框,它是基于列D的聚合结果。所以用AA列总结基于a,b,c的A值,BB和最后一个CC相同(最复杂的)如果C为1则求和A,如果C为2则求和B.

这是我想要的结果。

#   AA  BB  CC
# a 7   70  25
# b 11  110 110
# c 18  180 81

我想我需要在DT1上使用aggregate函数,但我不知道如何判断它是否基于DT2的D列。也许是merge,但正如我所提到的,数据非常大,合并可以吸收内存。

任何建议都会受到赞赏。感谢

1 个答案:

答案 0 :(得分:2)

试试这个:

DT3 <- aggregate(cbind(DT1$A,DT1$B, ifelse(DT2$C==1,DT1$A , DT1$B))~ DT2$D, FUN=sum)