省略包含NA的特定列的行

我想知道如何在数据框架中省略NA值,但只在我感兴趣的一些列中。

例如,

 DF <- data.frame(x = c(1, 2, 3), y = c(0, 10, NA), z=c(NA, 33, 22)) 

但是我只想省略yNA的数据,所以结果应该是

  xyz 1 1 0 NA 2 2 10 33 

na.omit似乎删除所有包含任何NA行。

有人能帮我解决这个简单的问题吗?

但是如果现在我改变这个问题:

 DF <- data.frame(x = c(1, 2, 3,NA), y = c(1,0, 10, NA), z=c(43,NA, 33, NA)) 

如果我只想省略x=naz=na ,我可以在哪里放置| 在function?

你可以使用complete.cases函数,并把它放到一个函数中:

 DF <- data.frame(x = c(1, 2, 3), y = c(0, 10, NA), z=c(NA, 33, 22)) completeFun <- function(data, desiredCols) { completeVec <- complete.cases(data[, desiredCols]) return(data[completeVec, ]) } completeFun(DF, "y") # xyz # 1 1 0 NA # 2 2 10 33 completeFun(DF, c("y", "z")) # xyz # 2 2 10 33 

编辑: 只返回没有NA的行

如果要删除任何列中至less有一个NA所有行,请直接使用complete.cases函数:

 DF[complete.cases(DF), ] # xyz # 2 2 10 33 

或者,如果completeFun已经在您的工作stream程中根深蒂固;)

 completeFun(DF, names(DF)) 

使用is.na

 DF <- data.frame(x = c(1, 2, 3), y = c(0, 10, NA), z=c(NA, 33, 22)) DF[!is.na(DF$y),] 

使用“子集”

 DF <- data.frame(x = c(1, 2, 3), y = c(0, 10, NA), z=c(NA, 33, 22)) subset(DF, !is.na(y)) 

哈德利的tidyr刚刚得到了这个惊人的functiondrop_na

 library(tidyr) DF %>% drop_na(y) xyz 1 1 0 NA 2 2 10 33 

尝试这个:

 cc=is.na(DF$y) m=which(cc==c("TRUE")) DF=DF[-m,]