如何组合两列的常用值,同时平均其他列的相应值

时间:2016-04-30 17:00:09

标签: r

我有一个数据框

""

我想结合列#34; a"的常用元素。和" b"像plyr包中的count函数一样:

> 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

但我也希望保留我的专栏&#34; c&#34;它将包含所有组合行的平均值。如下面的#34; m&#34;

栏中所示
> count(df, vars= c("a", "b"))

任何建议我可以这样做

2 个答案:

答案 0 :(得分:2)

我们可以按'a','b',然后summarise分组,将行数创建为'freq',将'{''mean创建为'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

答案 1 :(得分:2)

或使用data.table

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