仅通过重复行聚合两个数据帧

时间:2017-05-01 13:22:50

标签: r

我使用聚合函数来对重复行和唯一行进行求和,并在两个数据帧(df和nm)中找到公共列的平均值。即

df
User    Apple   Cherry  Kiwi    Lemon
A       208      71     129     58
B       81       69     142     53
C       164      212    175     200
D       125      73     51      214
E       205      123    46      75
F       53      215     40      38

nm
User    Lemon   Cherry  Apple   Kiwi
A        161     57      27      38
B        26      153     57      45
C        39      153     219     86
D        47      155     139     61

kl = aggregate(.~User, data=rbind(df, nm[, match(colnames(df), colnames(nm))]), FUN=mean)

显示重复行和唯一行的输出。

kl
User    Apple   Cherry  Kiwi    Lemon
A       117.5    64     83.5    109.5
B       69       111    93.5    39.5
C       191.5    182.5  130.5   119.5
D       132      114    56      130.5
E       205      123    46      75
F       53      215     40      38

But  wanted output of only duplicated rows i.e. unique rows should be removed.

 kl
    User    Apple   Cherry  Kiwi    Lemon
    A       117.5    64     83.5    109.5
    B       69       111    93.5    39.5
    C       191.5    182.5  130.5   119.5
    D       132      114    56      130.5

如何使用上述公式进行此操作。

我试图找到这个答案,但到处都是重复的,并且显示了独特的例子。

请提供解决方案!!

由于

1 个答案:

答案 0 :(得分:1)

我们可以在%in%

之前使用rbind对“df”行进行子集化
aggregate(.~User, rbind(df[df$User %in% nm$User,], nm), FUN = mean)
#   User Apple Cherry  Kiwi Lemon
#1    A 117.5   64.0  83.5 109.5
#2    B  69.0  111.0  93.5  39.5
#3    C 191.5  182.5 130.5 119.5
#4    D 132.0  114.0  56.0 130.5

或者如果我们使用match

aggregate(.~User, rbind(df[match(df$User, nm$User, nomatch = 0),], nm), FUN = mean)

如果我们只对常见的User感兴趣,那么另一种选择是intersect

在OP的代码中,match用于对列进行子集,而两个数据集中的列相同。