2017-05-01 34 views
0

我使用聚集函数来总结两者重复和唯一行,找到公用列意味着两个数据帧(DF &纳米)即骨料两个数据帧只

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

我们可以使用%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 s,又一选择是intersect


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

+1

Thanks akrun !!它的作用像魅力。我的数据集很大,还有其他方法可以更快地完成同样的活动。 – ROY