首页 > 解决方案 > 使用循环生成汇总函数参数

问题描述

我有一个数据看起来像这样。

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

标签: rloopsdplyr

解决方案


你不能在里面使用循环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

推荐阅读