如何在dplyr的across中为源列与替换列实现动态if else逻辑
用dplyr的across动态替换匹配列的NA值为对应_replacement列的值
完整实现代码
library(dplyr) # 原始数据框 df <- data.frame(value_2022 = c(1, NA, 3), volume_2022 = c(NA, 2, 3), value_2022_replacement = c(1.5, 2.5, 3.5), volume_2022_replacement = c(0.5, 1.5, 2.5)) # 动态替换NA值 df_processed <- df %>% mutate(across(matches("^v.+2022$"), ~ ifelse(is.na(.x), get(paste0(cur_column(), "_replacement")), .x))) # 查看处理后结果 df_processed
代码说明
- 定位目标列:通过
matches("^v.+2022$")匹配所有以v开头、以2022结尾的列,不管有多少符合条件的列都能适配。 - 动态获取替换列:在
across的处理函数中,cur_column()会返回当前正在处理的列名,拼接_replacement后缀后,用get()函数提取对应替换列的数值。 - NA替换逻辑:用
ifelse判断当前列的元素是否为NA,是则取替换列的对应值,否则保留原数值。
运行结果
value_2022 volume_2022 value_2022_replacement volume_2022_replacement 1 1.0 0.5 1.5 0.5 2 2.5 2.0 2.5 1.5 3 3.0 3.0 3.5 2.5
内容的提问来源于stack exchange,提问作者Alberto Agudo Dominguez
相关产品推荐
相关产品推荐

