R中处理列存在性后批量将指定列特定值设为NA失败的问题
解决R中批量替换指定列空值为NA的问题
问题1:获取存在的目标列列表
直接取目标列名和数据集列名的交集,是更简洁可靠的方式,不用先select再提取列名:
target_cols <- c('first_name', 'last_name', 'mrn', 'born_on', 'gender', 'middle_name') # 只保留数据中实际存在的列 variable_list <- intersect(target_cols, names(data))
这样得到的variable_list是标准字符向量,格式完全符合后续操作要求。
问题2:批量替换空字符串和点为NA
你用的是data.table语法,但循环里的条件判断和赋值写法有误,修正后如下:
library(data.table) # 确保数据集是data.table对象,若不是先转换 setDT(data) for (col in variable_list) { # 合并两个条件,一次完成替换 data[get(col) %in% c("", "."), (col) := NA] }
如果想避免循环,用data.table的.SDcols可以更高效批量处理:
data[, (variable_list) := lapply(.SD, function(x) { x[x %in% c("", ".")] <- NA x }), .SDcols = variable_list]
若使用dplyr(tidyverse)的写法
习惯tidyverse风格的话,无需循环,一行代码就能完成:
library(dplyr) data <- data %>% mutate(across(all_of(variable_list), ~ ifelse(.x %in% c("", "."), NA, .x)))
内容的提问来源于stack exchange,提问作者bziggy
相关产品推荐
相关产品推荐

