我有一个数据框
""
我想结合列#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"))
任何建议我可以这样做
答案 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