r - 使用循环生成汇总函数参数
问题描述
我有一个数据看起来像这样。
data = data.frame(GENDER = c("1", "1", "1", "2", "2"),
ZSCORE_0 = c(12.12, 12.67, 13.72, 13.79, 14.78),
ZSCORE_3 = ...,
ZSCORE_6 = ...,
...
ZSCORE = 60 = ...)
我尝试使用 dplyr 包中的汇总函数来汇总这些数据。
我有一个参数太多的问题。
例如
data %>%
group_by(GENDER) %>%
summarise(MIN_ZSCORE_0 = min(ZSCORE_0),
MIN_ZSCORE_3 = min(ZSCORE_3),
...,
MIN_ZSCORE_60 = min(ZSCORE_60),
MAX_ZSCORE_0 = max(ZSCORE_0),
MAX_ZSCORE_3 = max(ZSCORE_3),
...,
MAX_ZSCORE_60 = max(ZSCORE_60),
MEAN,
MEDIAN,
n,
...)
我想简化这项工作。
我使用循环来创建参数。
interval = seq(3, 60, 3)
data %>%
group_by(GENDER) %>%
summarise(for (i in interval) {
target = paste0("ZSCORE_", i)
min(target)
max(target)
...
n(target)
})
但是它不起作用。
Error: Column `for (... in NULL) NULL` is of unsupported type NULL
解决方案
你不能在里面使用循环summarise
。但是,尝试使用summarise_all
:
require(tidyverse)
mtcars %>%
summarise_all(c("min", "max"))
结果:
mpg_min cyl_min disp_min hp_min drat_min wt_min qsec_min
1 10.4 4 71.1 52 2.76 1.513 14.5
vs_min am_min gear_min carb_min mpg_max cyl_max disp_max
1 0 0 3 1 33.9 8 472
hp_max drat_max wt_max qsec_max vs_max am_max gear_max
1 335 4.93 5.424 22.9 1 1 5
carb_max
1 8
编辑
它们在使用n()
inside summarise_all
/时存在问题,summarise_if
因为它会自动尝试将参数强制na.rm = TRUE
转换为n()
. 这反过来会引发错误,因为n()
没有这个论点。但是,您可以使用此 hack(取自此处):
require(tidyverse)
mtcars %>%
summarise_if(is.numeric, c("min", "max")) %>%
cbind(summarise_if(mtcars, is.numeric, funs(n())))
结果:
mpg_min cyl_min disp_min hp_min drat_min wt_min qsec_min
1 10.4 4 71.1 52 2.76 1.513 14.5
vs_min am_min gear_min carb_min mpg_max cyl_max disp_max
1 0 0 3 1 33.9 8 472
hp_max drat_max wt_max qsec_max vs_max am_max gear_max
1 335 4.93 5.424 22.9 1 1 5
carb_max mpg cyl disp hp drat wt qsec vs am gear carb
1 8 32 32 32 32 32 32 32 32 32 32 32
推荐阅读
- reactjs - 在 img 标签中使用时如何为 svg 着色?
- firebase - Firestore:添加后阻止写入/覆盖/更新字段
- python - 局部异常因子:预期 n_neighbors <= n_samples
- javascript - 删除空值和键形式 JSON Object Javascript
- sorting - 是否有 *name/literature* 用于将数字对集表示为复数向量(用于排序目的)?
- python - 在 mongodb 列表中成功插入对象时递增计数器
- javascript - PWA 应用重新运行 未检测到匹配的服务工作者
- c++ - 填满优先级队列后我的代码退出
- angular - 从 Typescript union 数据类型访问属性
- spring - 模拟 bean 自动装配到 @Spy bean mockito