2016-04-30 29 views
0

我有一個數據幀的相應值的共同價值組合兩個柱的如何而平均其它列

> df<- as.data.frame(cbind(a=c(rep(3, 5), rep(5, 5)), b=c(rep(1, 2), rep(2, 2), rep(3, 2), rep(4, 2), rep(5, 2)), c=(11:20))) 

> df 
    a b c 
1 3 1 11 
2 3 1 12 
3 3 2 13 
4 3 2 14 
5 3 3 15 
6 5 3 16 
7 5 4 17 
8 5 4 18 
9 5 5 19 
10 5 5 20 

我想列的「a」和「b」的共同元素結合等的計函數在plyr包中有:

> count(df, vars= c("a", "b")) 

但我還想保留我的列「c」,它將包含所有組合行的平均值。正如在列的「m」

a b freq m 
1 3 1 2 11.5 
2 3 2 2 13.5 
3 3 3 1 15.0 
4 5 3 1 16.0 
5 5 4 2 17.5 
6 5 5 2 19.5 

如下圖所示的任何建議,我誰能夠做到這一點

回答

2

我們可以按「A」,「B」,然後summarise建立行作爲「頻率」的數目和 'c' 爲 'M'

library(dplyr) 
df %>% 
    group_by(a, b) %>% 
    summarise(freq = n(), m= mean(c)) 
# a  b freq  m 
# (dbl) (dbl) (int) (dbl) 
#1  3  1  2 11.5 
#2  3  2  2 13.5 
#3  3  3  1 15.0 
#4  5  3  1 16.0 
#5  5  4  2 17.5 
#6  5  5  2 19.5 
2

或者使用data.tablemean

setDT(df) 

res <- df[,.(freq=.N, m=mean(c)),by=.(a,b)] 
res 

    a b freq m 
1: 3 1 2 11.5 
2: 3 2 2 13.5 
3: 3 3 1 15.0 
4: 5 3 1 16.0 
5: 5 4 2 17.5 
6: 5 5 2 19.5