0

我正在尝试使用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)and ,它工作正常。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功能。

4

1 回答 1

2

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

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}"
  )
  )
于 2021-01-11T03:30:08.790 回答