如何让R中dplyr::coalesce跳过数据框内不存在的列名?
在dplyr的mutate中让coalesce跳过不存在的列名
默认情况下,直接在coalesce()里写数据框不存在的列名会触发报错,要实现跳过不存在列的需求,可以用以下两种实用方法:
方法一:结合any_of()和符号拼接
先把要合并的列名存成字符向量,用any_of()筛选出数据框中实际存在的列,再通过syms()和!!!把这些列转成coalesce()的参数:
library(dplyr) # 示例数据(不存在col2) data <- tibble(col1 = c(NA, 2, NA), col3 = c(1, NA, 3)) # 要尝试合并的列名列表 cols_to_coalesce <- c("col1", "col2", "col3") data %>% mutate(var_1 = coalesce(!!!syms(any_of(cols_to_coalesce))))
这段代码会自动跳过不存在的col2,只对col1和col3执行coalesce逻辑,最终var_1会取每行col1的非NA值,若col1为NA则取col3的值。
方法二:先筛选存在列再用do.call
先通过intersect()找出存在的列,再用pick()选择这些列,最后用do.call()把coalesce()应用到选中的列上:
existing_cols <- intersect(cols_to_coalesce, names(data)) data %>% mutate(var_1 = do.call(coalesce, pick(all_of(existing_cols))))
这种方法逻辑更直观,先明确要处理的列,再执行合并操作,效果和第一种方法完全一致。
内容的提问来源于stack exchange,提问作者shizzle
相关产品推荐
相关产品推荐

