You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

当summarise_each()与funs()被弃用时,如何更新dplyr代码?

问题:dplyr中summarise_each/funs弃用后的代码更新

原代码及警告信息

原代码:

group_by(ID) %>%
  summarise_each(funs(if (is.numeric(.))
    mean(., na.rm = TRUE)
    else
      first(.)))

收到的警告:

警告信息:
1: summarise_each_() 在dplyr 0.7.0中被弃用。
请使用across()替代。
此警告每8小时显示一次。
调用lifecycle::last_lifecycle_warnings()查看警告生成位置。
2: funs() 在dplyr 0.8.0中被弃用。
请使用函数或lambda表达式的列表:

简单命名列表:
list(mean = mean, median = median)

使用tibble::lst()自动命名:
tibble::lst(mean, median)

使用lambda表达式
list(~ mean(., trim = .2), ~ median(., na.rm = TRUE))

正确更新后的代码

group_by(ID) %>%
  summarise(across(everything(), ~ if (is.numeric(.x)) mean(.x, na.rm = TRUE) else first(.x)))

关键说明

  • 用summarise()搭配across()替代已弃用的summarise_each(),across(everything())指定对所有列执行操作,和原代码逻辑一致
  • 用lambda表达式~ ...替换弃用的funs(),这里用.x作为列变量的占位符(也可以继续用.,但.x在复杂逻辑中更清晰)
  • 完整保留原逻辑:数值类型列计算忽略NA的均值,非数值类型列取分组后的第一个值

内容的提问来源于stack exchange,提问作者MeganCole

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 08:32:09