使用下面的代码,我试图通过“ 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))
答案 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
遍历list
,select
感兴趣的列并应用colMeans
library(purrr)
iris %>%
group_split(Species, keep = FALSE) %>%
map_dfr(~ .x %>%
select(1:2) %>%
colMeans %>%
round(2))