R如何将dataframe指定多列中的值81批量替换为NA
解决方案
原代码失效原因
你通过select筛选出来的列是原数据集的临时副本,对副本赋值不会同步修改原df,因此运行后看不到效果。同时注意你的示例数据中Col类列包含字母内容,属于字符型列,判断匹配值时需要用字符串格式的"81",否则数值型81无法匹配到字符型的"81"。
可行实现方案
Tidyverse 方案(dplyr 1.0.0+ 推荐写法)
使用across批量处理匹配的列,逻辑更清晰:
library(dplyr) df <- df %>% mutate(across(matches("^Col_\\d+$"), ~ifelse(.x == "81", NA, .x)))
基础R方案
直接定位目标列后替换,无需加载第三方包:
# 定位所有Col开头的列 target_cols <- grep("^Col_\\d+$", names(df)) # 批量替换 df[target_cols][df[target_cols] == "81"] <- NA
注意事项
如果你的Col类列全部为数值类型(没有字母类取值),将上述代码中的"81"改为81即可。
内容的提问来源于stack exchange,提问作者bison2178
相关产品推荐
相关产品推荐

