R语言如何删除数据框中含问号?而非NA值的行
R中删除所有含
?标记行的实现方法 na.omit()只能识别R语言标准的缺失值NA,无法识别自定义的?缺失标记,按以下任意一种方法处理即可:
方案1:读入数据时直接指定缺失值规则(最推荐,从根源避免问题)
用read.csv、read.table等基础读入函数加载数据时,添加na.strings = "?"参数,读入阶段就会自动把所有?识别为标准NA,后续直接调用缺失值处理函数即可:# 读入数据时自动将?转为NA df <- read.csv("你的数据路径.csv", na.strings = "?") # 直接剔除含缺失值的行 df_clean <- na.omit(df)方案2:对已加载到环境的数据框先替换标记再删行
如果数据已经完成读入,先批量把所有等于?的单元格替换为标准NA,再做行剔除:# 全局替换所有?为NA df[df == "?"] <- NA # 剔除含任意缺失值的行 df_clean <- na.omit(df)如果你使用tidyverse生态的dplyr包,可以用更简洁的链式写法:
library(dplyr) df_clean <- df %>% mutate(across(everything(), ~na_if(., "?"))) %>% na.omit()方案3:不做NA转换,直接筛选不含
?的行
不需要转换缺失值标记的话,可以逐行扫描,直接保留所有单元格都不等于?的行:df_clean <- df[!apply(df, 1, function(x) any(x == "?")), ]
注意:如果数据中存在因子类型列,直接替换
?可能因?不在预设因子水平中报错,处理前可以先将因子列转为字符类型,或在读数据时添加stringsAsFactors = FALSE参数规避问题。
内容的提问来源于stack exchange,提问作者Basheer
相关产品推荐
相关产品推荐

