我正在处理一个大型数据集,其中一些行包含NA,另一些包含空格:
df <- data.frame(ID = c(1:7),
home_pc = c("","CB4 2DT", "NE5 7TH", "BY5 8IB", "DH4 6PB","MP9 7GH","KN4 5GH"),
start_pc = c(NA,"Home", "FC5 7YH","Home", "CB3 5TH", "BV6 5PB",NA),
end_pc = c(NA,"CB5 4FG","Home","","Home","",NA))
如何一次性删除NA和空白(在start_pc和end_pc列中)?我过去曾用过:
df<- df[-which(is.na(df$start_pc)), ]
...删除NAs - 是否有类似的命令来删除空白?
答案 0 :(得分:64)
df[!(is.na(df$start_pc) | df$start_pc==""), ]
答案 1 :(得分:22)
它是相同的构造 - 只测试空字符串而不是NA
:
试试这个:
df <- df[-which(df$start_pc == ""), ]
事实上,查看代码时,您不需要which
,而是使用否定代码,因此您可以将其简化为:
df <- df[!(df$start_pc == ""), ]
df <- df[!is.na(df$start_pc), ]
当然,您可以将这两个陈述合并如下:
df <- df[!(df$start_pc == "" | is.na(df$start_pc)), ]
使用with
进一步简化:
df <- with(df, df[!(start_pc == "" | is.na(start_pc)), ])
您还可以使用nzchar
测试非零字符串长度。
df <- with(df, df[!(nzchar(start_pc) | is.na(start_pc)), ])
免责声明:我没有测试任何此代码。如果在任何地方出现语法错误,请告诉我
答案 2 :(得分:4)
使用dplyr的优雅解决方案是:
df %>%
# recode empty strings "" by NAs
na_if("") %>%
# remove NAs
na.omit
答案 3 :(得分:3)
一种简单的方法是将所有空白单元格设为NA并且仅保留完整的案例。您也可以查找na.omit示例。这是一个广泛讨论的话题。
DF [DF == “”] LT; -NA
DF&LT; -df [complete.cases(DF),]
答案 4 :(得分:1)
我做了类似的事情来删除一个变量中带空格的行: df&lt; - subset(df,VAR!=&#34;&#34;)