删除一个特定列中包含空值的行

时间:2012-02-03 10:06:02

标签: r dataframe missing-data

我正在处理一个大型数据集,其中一些行包含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 - 是否有类似的命令来删除空白?

5 个答案:

答案 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;)