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

如何用同数据集带.x后缀的对应列替换多列中的NA?

解决方案

用dplyr的mutate(across())结合coalesce()函数是最简便的批量处理方案,正好适配你多列替换的需求,同时用str_replace()来生成对应的.x后缀列名,完全符合你的要求:

library(dplyr)
library(stringr)

# 批量替换测试列的NA为对应.x列的值
df_processed <- df %>%
  mutate(across(
    # 筛选所有需要处理的测试列(匹配以Test开头且不带.x的列,可根据实际列名调整正则规则)
    matches("^Test\\d+$"),
    ~ coalesce(., !!sym(str_replace(cur_column(), "$", ".x")))
  ))

print(df_processed)

代码说明:

  • matches("^Test\\d+$"):精准筛选出Test1、Test2这类测试列,若实际列名规则不同,可修改正则(比如matches("^[A-Za-z]+\\d+$")匹配字母加数字格式的列)。
  • str_replace(cur_column(), "$", ".x"):通过字符串替换,给当前处理的列名添加.x后缀,自动生成对应的替补列名。
  • coalesce(., 替补列):coalesce会依次取第一个非NA的值,刚好实现“原列非NA则保留原值,原列NA则用对应.x列的值”的逻辑。
  • mutate(across()):批量遍历所有目标列,避免手动重复编写每一列的替换逻辑,完美适配你实际数据有大量列的场景。

处理后结果示例:

ID Age Gender Test1 Test2 Test3 Test1.x Test2.x Test3.x
1  7877  40      M    78    70    84      NA      NA      84
2  6345  54      F    62    99    61      62      NA      NA
3  9170  41      F    82    80    96      82      NA      NA
4  2400  83      M   100    95   100      94      95      NA
5  5920  66      M    77    62    69      NA      NA      NA
6  2569  34      M    99    96    81      NA      NA     100
7  7879  28      M    64    71    90      NA      NA      90
8  8652  53      F    95    74    89      95      NA      NA
9  6357  97      F    92    86    83      NA      86      NA
10 1943  45      M    95    72    98      NA      72      NA

内容的提问来源于stack exchange,提问作者Michiel Besseling

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 07:36:23