R语言如何删除数据集中所有取值全为空的列
R语言剔除全空字符串列实现方案
你的空值以""形式存储,不是R默认识别的NA类型,判断时注意不要直接调用is.na(),以下是几种可直接运行的实现:
推荐方案:Base R向量化操作(无需写循环、无需加载第三方包)
直接逐列统计非空值数量,过滤掉全空列即可,运行效率远高于for循环:
# 全列判断,id列为数字类型不会被误删 data_clean <- data[, colSums(data != "") != 0]
如果需要更稳妥,避免其他列出现异常值干扰,可以单独对title_*列做判断,再和id列拼接:
# 匹配所有title开头的列名 title_colnames <- grep("^title_\\d+$", colnames(data), value = TRUE) # 筛选非全空的title列 non_empty_title <- title_colnames[colSums(data[title_colnames] != "") != 0] # 组合最终保留的列 data_clean <- data[, c("id", non_empty_title)]
对应你思路的for循环实现
如果要按遍历列的逻辑写,代码如下:
# 初始化保留列向量,id列默认留存 keep_columns <- c("id") # 遍历1到47对应的title列 for (i in 1:47) { current_col <- paste0("title_", i) # 判断当前列是否不是全为空字符串 if (!all(data[[current_col]] == "")) { keep_columns <- c(keep_columns, current_col) } } # 生成最终清洗后数据集 data_clean <- data[, keep_columns]
避坑提示:如果后续要做统计分析,建议先把空字符串统一转换为R标准缺失值
NA,避免其他识别缺失值的函数运行出错,转换代码:data[data == ""] <- NA
内容的提问来源于stack exchange,提问作者Lee
相关产品推荐
相关产品推荐

