【问题标题】:Using across function in dplyr [duplicate]在 dplyr 中使用跨函数 [重复]
【发布时间】:2020-07-06 12:21:29
【问题描述】:

我有一个包含缺失值的数据框。

# Create dataframe
df <- data.frame(Athlete = c(c(replicate(200,"Ali"), c(replicate(200,"Tyson")))),
                 Score = replicate(400, sample(c(1:20, NA), 1, rep = TRUE)))

我的函数对因子进行分组,然后计算不包含 NA 值的行。

library(dplyr)
Result <- df %>%
  dplyr::group_by(Athlete, .drop = TRUE) %>%
  dplyr::summarise_each(list(~sum(!is.na(.))))

我得到了想要的结果。但是有一个警告信息。

`summarise_each_()` is deprecated as of dplyr 0.7.0.
Please use `across()` instead.

我正在尝试更新代码库,以便停止警告消息。

注意:警告信息中还写着;

This warning is displayed once every 8 hours.
Call `lifecycle::last_warnings()` to see where this warning was generated. 

因此,如果没有警告消息,请重新启动 Rstudio 并重新运行脚本以生成警告消息。

【问题讨论】:

    标签: r dplyr group-summaries


    【解决方案1】:

    summarise_each 被替换为 summarise_at/summarise_all,现在在 dplyr 1.0.0 中被替换为 across

    library(dplyr)
    df %>%
     group_by(Athlete) %>%
     summarise(across(everything(), ~sum(!is.na(.))))
    
    #  Athlete Score
    #  <chr>   <int>
    #1 Ali       189
    #2 Tyson     195
    

    不过,如果您只有一列要汇总,如图所示,您可以直接执行此操作:

    df %>%
      group_by(Athlete, .drop = TRUE) %>%
      summarise(Score  = sum(!is.na(Score)))
    

    【讨论】:

      猜你喜欢
      • 2020-10-16
      • 1970-01-01
      • 2020-12-10
      • 1970-01-01
      • 1970-01-01
      • 2020-11-11
      • 1970-01-01
      • 2021-07-30
      • 1970-01-01
      相关资源
      最近更新 更多