我使用聚合函数来对重复行和唯一行进行求和,并在两个数据帧(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
如何使用上述公式进行此操作。
我试图找到这个答案,但到处都是重复的,并且显示了独特的例子。
请提供解决方案!!
由于
答案 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
用于对列进行子集,而两个数据集中的列相同。