将几列分组后获取平均值

时间:2020-03-08 19:07:21

标签: r dplyr

使用下面的代码,我试图通过“ gender and CG_less14”对我的数据(Diss)进行分组,然后获取第5列至第29列的均值。然后,我希望将均值四舍五入到最接近的小数位。 我想在控制台中打印出平均值,以便可以手动使用它们进行进一步的分析。

我遇到一个错误:t(。,round(colMeans(Diss [,5:29]),2))中的错误: 未使用的参数(round(colMeans(Diss [,5:29]),2))

 Diss %>%
   group_by(gender, CG_less14) %>%
         t(round(colMeans(Diss[,5:29]),2))

1 个答案:

答案 0 :(得分:2)

有了dplyr,我们可以使用summarise_at

library(dplyr)
Diss %>%
    group_by(gender, CG_less14) %>%
    summarise_at(5:29, ~ round(mean(.), 2))

base R中,我们可以使用aggregate

aggregate(.~ gender + CG_less14, Diss, function(x) round(mean(x), 2))

带有iris

的可复制示例
iris %>%
     group_by(Species) %>% 
     summarise_at(1:2, ~ round(mean(.), 2))
# A tibble: 3 x 3
#  Species    Sepal.Length Sepal.Width
#  <fct>             <dbl>       <dbl>
#1 setosa             5.01        3.43
#2 versicolor         5.94        2.77
#3 virginica          6.59        2.97

请注意,在执行group_by之后,可以使用.data.来访问数据,如果我们使用原始数据对象作为子集,则会破坏分组处理并获得整个专栏

如果我们要使用colMeans,则可以选择使用split通过分组变量group_split遍历listselect感兴趣的列并应用colMeans

library(purrr)
iris %>%
   group_split(Species, keep = FALSE) %>%
   map_dfr(~ .x %>% 
                select(1:2) %>%
                colMeans %>% 
                round(2))
相关问题