【问题标题】:Using summarise, across, and quantile functions together一起使用 summarise、cross 和 quantile 函数
【发布时间】:2021-01-11 03:24:49
【问题描述】:

我正在尝试使用mtcars 数据集来计算汇总统计信息。这是我的代码-

df <- as_tibble(mtcars)


df.sum2 <- df %>%
  select(mpg, cyl, vs, am, gear, carb) %>% 
  mutate(across(where(is.factor), as.numeric)) %>% 
  summarise(across(
    .cols = everything(), 
    .fns = list(
                Min = min, 
                Q25 = quantile (., 0.25), 
                Median = median, 
                Q75 = quantile (., 0.75), 
                Max = max,
                Mean = mean, 
                StdDev = sd,
                N = n()
                ), na.rm = T,
   .names = "{col}_{fn}"
                   )
            )

但我收到以下错误 -

错误:summarise() 输入 ..1 有问题。 x 不能对不存在的列进行子集化。 x 位置 65、66、69、71、76 等不存在。 i 只有 6 列。 i 输入..1across(...)

如果我从上面的代码中取出Q25 = quantile (.,0.25)Q75 = quantile (.,0.75),它工作正常。实际上,我可以使用以下代码获得预期的结果 -

df.sum <- df %>%
  select(mpg, cyl, vs, am, gear, carb) %>% # select variables to summarise
  summarise_each(funs(Min = min, 
                      Q25 = quantile (., 0.25), 
                      Median = median, 
                      Q75 = quantile (., 0.75), 
                      Max = max,
                      Mean = mean, 
                      StdDev = sd,
                      N = n()))

但我想将across 函数与summarise 函数一起使用。我不想使用summarise_each 函数。

【问题讨论】:

    标签: r dplyr across


    【解决方案1】:

    您需要在传递其他参数时使用匿名函数或公式语法。试试

    library(dplyr)
    
    df.sum2 <- df %>%
      select(mpg, cyl, vs, am, gear, carb) %>% 
      mutate(across(where(is.factor), as.numeric)) %>% 
      summarise(across(
        .cols = everything(), 
        .fns = list(
          Min = min, 
          Q25 = ~quantile(., 0.25), 
          Median = median, 
          Q75 = ~quantile(., 0.75), 
          Max = max,
          Mean = mean, 
          StdDev = sd,
          N = ~n()
        ),
        .names = "{col}_{fn}"
      )
      )
    

    【讨论】:

    • 谢谢。现在可以了。您能提供一些关于我如何知道我需要使用公式的知识吗?
    • 在向函数传递附加参数时,您需要使用公式 (~)。 min 没有其他参数,因此您可以按原样使用它。 quantile 有一个额外的参数,你要传递它是 0.25 所以在这里你需要使用公式。
    猜你喜欢
    • 2021-06-01
    • 2015-10-27
    • 1970-01-01
    • 1970-01-01
    • 2020-12-07
    • 2019-11-03
    • 1970-01-01
    • 2020-04-13
    • 2016-08-07
    相关资源
    最近更新 更多