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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 10:12:11