R使用group_by计算数据帧中值的平均值和总和

R使用group_by计算数据帧中值的平均值和总和,r,dplyr,R,Dplyr,我有一个我想要的数据帧: 通过两列中的分组,我想计算平均值并知道具有此值的元素数: test=data.frame(a=c(1,1,1,2,4,5,8,5,5,7), b=c('A','A','B','A','B','B','A','B','B','A'), c=runif(10, -5,0)) 对于具有相同“a”和“b”的行,我想计算“c”的平均值,并知道用于计算平均值的“a”的和 我试着这样计算,意思是: test_mean=

我有一个我想要的数据帧: 通过两列中的分组,我想计算平均值并知道具有此值的元素数:

test=data.frame(a=c(1,1,1,2,4,5,8,5,5,7),
                b=c('A','A','B','A','B','B','A','B','B','A'),
                c=runif(10, -5,0))
对于具有相同“a”和“b”的行,我想计算“c”的平均值,并知道用于计算平均值的“a”的和

我试着这样计算,意思是:

test_mean=test %>%
  group_by(a,b) %>% 
  summarise_at(vars("c"), mean) 
# %>% mutate(d = sum(a))


a   b      c      
1   A   -3.138246
1   B   -0.411621
2   A   -2.787820
4   B   -2.343191
5   B   -3.323057
7   A   -4.765974
8   A   -4.596118
但我还需要第四列的总和:

a   b      c          d    
1   A   -3.138246     2
1   B   -0.411621     1
2   A   -2.787820     1
4   B   -2.343191     1
5   B   -3.323057     3
7   A   -4.765974     1
8   A   -4.596118     1

无需在处进行
summary\u,在这种情况下,简单的
summary
即可:

library(tidyverse)
test <- data.frame(a=c(1,1,1,2,4,5,8,5,5,7),
                b=c('A','A','B','A','B','B','A','B','B','A'),
                c=runif(10, -5,0))
test %>% 
    group_by(a,b) %>% 
    summarize(c = mean(c), d = n())
#> `summarise()` regrouping output by 'a' (override with `.groups` argument)
#> # A tibble: 7 x 4
#> # Groups:   a [6]
#>       a b          c     d
#>   <dbl> <chr>  <dbl> <int>
#> 1     1 A     -2.83      2
#> 2     1 B     -0.992     1
#> 3     2 A     -2.92      1
#> 4     4 B     -4.83      1
#> 5     5 B     -3.19      3
#> 6     7 A     -0.639     1
#> 7     8 A     -2.25      1
库(tidyverse)
测试%
(a,b)组%>%
总结(c=平均值(c),d=n()
#>`summary()`按'a'重新分组输出(用`groups`参数重写)
#>#tibble:7 x 4
#>#组:a[6]
#>a、b、c、d
#>       
#>1 A-2.83 2
#>2 1 B-0.992 1
#>3.2 A-2.92 1
#>4 B-4.83 1
#>5 B-3.19 3
#>67A-0.639 1
#>7.8 A-2.25 1

如果有多个变量,则考虑使用<代码>横跨(DPLYR>1.1.0)

< P>使用<代码>数据>表< /C> < /P>
library(data.table)
setDT(test)[, .(c = mean(c), d = .N), .(a, b)]

只需做
…总结一下(vars(“c”)、funs(mean,n())
非常感谢我所需要的