我有一个类似这样的数据。
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软件包中的summary函数汇总此数据。
我有一个参数太多的问题。
例如
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
答案 0 :(得分:0)
您不能在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()
/ summarise_all
中使用summarise_if
时会遇到问题,因为它会自动尝试将参数na.rm = TRUE
强制插入n()
中。反过来会引发错误,因为n()
没有此参数。但是,您可以使用此黑客(摘自here):
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