省略包含NA的特定列的行
我想知道如何在数据框架中省略NA
值,但只在我感兴趣的一些列中。
例如,
DF <- data.frame(x = c(1, 2, 3), y = c(0, 10, NA), z=c(NA, 33, 22))
但是我只想省略y
是NA
的数据,所以结果应该是
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=na
或z=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,]