为何R语言read.csv未将CSV空白单元格识别为NA?
为什么R的read.csv()不把CSV空白单元格解析为NA?
这是因为read.csv()的默认行为是将CSV中的空白单元格识别为空字符串(""),而非NA。无论列类型是character还是factor,空字符串都不会被自动判定为缺失值。
解决方法
- 读入时直接指定NA识别规则:使用
na.strings参数,把空字符串映射为NA,这是最直接的方式:
dat <- read.csv("test.csv", na.strings = "")
- 已读入数据的手动转换:如果已经读入了数据,可以手动将空字符串替换为NA:
# 对所有character类型列批量处理 dat[sapply(dat, is.character)] <- lapply(dat[sapply(dat, is.character)], function(x) ifelse(x == "", NA, x))
验证示例
修改读入代码后,再执行检测代码就能正确识别NA:
dat <- read.csv("test.csv", na.strings = "") # 检查character类型的NA is.na(dat$var) is.na(dat$var1) # 转factor后检查NA dat$var_f <- factor(dat$var) dat$var_f1 <- factor(dat$var1) is.na(dat$var_f) is.na(dat$var_f1)
内容的提问来源于stack exchange,提问作者Peter Miksza
相关产品推荐
相关产品推荐

