r - 使用简单列表和自动命名列表重写 `summarise_all` 而不弃用`funs`

我正在尝试计算两列中每一列中 NA values 的数量。

下面的代码有效。

temp2 %>%
  select(c18basic, c18ipug) %>%
  summarise_all(funs(sum(is.na(.))))

但我收到这个警告:

Warning message:
`funs()` was deprecated in dplyr 0.8.0.
Please use a list of either functions or lambdas: 

  # Simple named list: 
  list(mean = mean, median = median)

  # Auto named with `tibble::lst()`: 
  tibble::lst(mean, median)

  # Using lambdas
  list(~ mean(., trim = .2), ~ median(., na.rm = TRUE))

如何使用上述每种技术重写我的 summarise_all 行:Simple list Auto named list?不使用 summarise_all,因为它似乎已被 https://dplyr.tidyverse.org/reference/summarise_all.html

谢谢。

注意:我发现 TidyVerse 文档很难理解。如果有人可以向我指出可以帮助我自己解决这些问题的资源,我将不胜感激。先感谢您。

注意:我想出了如何使用 Lambda 来做到这一点:

temp2 %>%
  select(c18basic, c18ipug) %>%
  summarise(across(everything(), ~ sum(is.na(.x))))

回答1

像这样?

dplyr::summarize_all(list(sum= ~sum(is.na(.x), na.rm = T)))

顺便说一句, select() 不是必需的,你可以写

temp2 %>%
  summarise(across(c(c18basic,c18ipug), ~ sum(is.na(.x))))

前任。

library(dplyr)
mtcars[1,1] <- NA
mtcars %>% 
  summarise(across(c(mpg ,cyl), list(sum= ~sum(is.na(.x), na.rm = T))))

结果是

mpg_sum cyl_sum
    1       0

我想你明白了,看看语法有多简单,当使用更多功能时,例如

mtcars[1,1] <- NA
mtcars %>%
  summarise(across(c(mpg, cyl), list(
    Mean = ~ mean(., na.rm = T),
    SD = ~ sd(., na.rm = T),
    Min = ~ min(., na.rm = T),
    Max = ~ max(., na.rm = T),
    Obs. = ~ sum(!is.na(.))
  )))

相似文章

r - 重新编码数据帧中所有出现的多个字符串

我正在尝试将李克特量表调查数据(例如,“强烈同意-1”)转换为数字数据以用于统计分析。我有几十个使用相同比例的问题。我找到了一个解决方案,但它看起来很笨拙,希望有人可以为了学习而提出改进建议。df=d...

随机推荐

最新文章