r - 分组后获取多列的方法
问题描述
使用下面的代码,我试图按“性别和 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))
解决方案
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))
推荐阅读
- rest - 用于处理混合/批处理请求的正确(RESTful)HTTP 方法
- c++ - 使用优先队列插入/显示功能时出现分段错误
- gradle - 我可以制作 Gradle 依赖项的依赖项来强制一个版本吗?
- python - 在 Windows 中获取桌面上的选定文件 (7)
- python - 使用 readline 的 python 采样会产生内存错误
- javascript - ReactJS - covering with '0' the blank spaces
- javascript - Check if string is starting with prefix
- javascript - Creating a Javascript Date that is 10 milliseconds after epoch?
- python - Indexing a list in python and looping through these
- java - Determine the long, longer and longest ArrayList of Strings