在R的tidyverse框架下如何用字符串变量名向量调用pmax/pmin
错误原因
pmax函数要求将参与计算的每一列作为独立参数传入,你直接向pmax传递all_of(values)时,相当于传入了一个长度为2的列名字符向量,而非将选中列的数值分别作为参数输入,因此会触发长度不匹配的报错。
解决方案
下面提供三种不同场景下的可行写法,最终效果和手动传入列名的计算结果完全一致:
- 通用兼容写法(适配所有tidyverse版本):使用
do.call拼接参数
library(tidyverse) data(mtcars) values <- c("drat", "wt") mtcars %>% mutate(maxval = do.call(pmax, c(select(., all_of(values)), na.rm = TRUE)))
- 高可读性写法(dplyr >= 1.0.0):搭配
rowwise和c_across逐行计算
mtcars %>% rowwise() %>% mutate(maxval = pmax(c_across(all_of(values)), na.rm = TRUE)) %>% ungroup() # 计算完成后取消行分组,避免影响后续数据操作
- 高效简洁写法(dplyr >= 1.1.0):使用
pick和!!!拼接参数
mtcars %>% mutate(maxval = pmax(!!!pick(all_of(values)), na.rm = TRUE))
内容的提问来源于stack exchange,提问作者ssjjaca
相关产品推荐
相关产品推荐

