R 删除特定列中具有空值的行

R 删除特定列中具有空值的行,r,dataframe,missing-data,R,Dataframe,Missing Data,我正在处理一个大型数据集,其中一些行带有NAs,另一些行带有空白: 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","

我正在处理一个大型数据集,其中一些行带有NAs,另一些行带有空白:

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))

df这是相同的构造-只需测试空字符串,而不是
NA

试试这个:

df <- df[-which(df$start_pc == ""), ]
当然,你可以把这两种说法结合起来如下:

df <- df[!(df$start_pc == "" | is.na(df$start_pc)), ]
您还可以使用
nzchar
测试非零字符串长度

df <- with(df, df[!(nzchar(start_pc) | is.na(start_pc)), ])

<代码> DF

一个简单的方法是使所有空白单元格<代码> n>代码>只保留完整的情况。您还可以查找

na。省略
示例。这是一个广泛讨论的话题

df[df==""]<-NA
df<-df[complete.cases(df),]

df[df==“”]替代解决方案可以是删除一个变量中带空格的行:

df <- subset(df, VAR != "")

df使用dplyr的优雅解决方案是:

df %>%
  # recode empty strings "" by NAs
  na_if("") %>%
  # remove NAs
  na.omit

@richiecotton感谢您的编辑
nzchar
是一种测试非零长度的简洁方法,我不知道这一点。在我的情况下,这些解决方案都不起作用
df
|
是or运算符,并且
反转。因此,该命令显示所有行,这些行不是b)NA或b)等于“”。这段代码是否会删除整行,而不是仅通过删除空值来合并它们?我发现这也是可行的。我有一个数据集,我想删除我在列中丢失数据的行。使用我自己的数据帧执行此操作,并将值分配给新数据帧,达到了我的预期效果。欢迎使用堆栈溢出!虽然这在理论上可以回答这个问题,但在这里包括答案的基本部分,并提供链接供参考。非常优雅的解决方案和简单:)
df <- with(df, df[!(nzchar(start_pc) | is.na(start_pc)), ])
df[df==""]<-NA
df<-df[complete.cases(df),]
df <- subset(df, VAR != "")
df %>%
  # recode empty strings "" by NAs
  na_if("") %>%
  # remove NAs
  na.omit