如何筛选包含字符型NA的行?R语言数据清理求助
剔除Excel表格空行及处理字符型"NA"行的解决方案
一、剔除整行空行
空行分两种情况,对应不同处理方式:
- 若空行是整行全为R内置的
NA值:
# df是你的数据框 df <- df[rowSums(is.na(df)) != ncol(df), ]
- 若空行是整行全为空白字符(Excel里的空单元格导入后可能是""):
# 先把空白字符转为NA,再剔除全NA行 df[] <- lapply(df, function(x) ifelse(x == "", NA, x)) df <- df[rowSums(is.na(df)) != ncol(df), ]
二、筛选/剔除含字符型"NA"的行
你之前用filter+case_when+grepl绕了弯路,直接用filter写条件更直接:
假设目标列叫target_col:
- 要剔除该列等于字符型"NA"的行:
library(dplyr) df <- df %>% filter(target_col != "NA")
- 要剔除该列包含"NA"字符的行(比如"ABNA"这种带NA的字符串也会被剔除):
df <- df %>% filter(!grepl("NA", target_col))
三、一步搞定:同时剔除空行和字符型"NA"行
把两步结合起来:
library(dplyr) # 先处理空白转NA并剔除全空行 df[] <- lapply(df, function(x) ifelse(x == "", NA, x)) df <- df[rowSums(is.na(df)) != ncol(df), ] # 再剔除目标列是字符型"NA"的行 df <- df %>% filter(target_col != "NA")
常见问题说明
- 别用
case_when来做这种简单筛选,纯属画蛇添足,直接在filter里写逻辑条件就行。 - 一定要区分开R里的
NA(缺失值)和字符串"NA",前者用is.na()判断,后者用== "NA"或grepl()判断。
内容的提问来源于stack exchange,提问作者sebmw
相关产品推荐
相关产品推荐

