当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
相关产品推荐
相关产品推荐

