我想知道如何省略NA数据框中的值,但只在我感兴趣的某些列中.
例如,
DF <- data.frame(x = c(1, 2, 3), y = c(0, 10, NA), z=c(NA, 33, 22))
Run Code Online (Sandbox Code Playgroud)
但我只是想省略其中的数据y是NA,因此结果应该是
x y z
1 1 0 NA
2 2 10 33
Run Code Online (Sandbox Code Playgroud)
na.omit似乎删除所有行包含任何NA.
有人可以帮我解决这个简单的问题吗?
但如果现在我改变了这样的问题:
DF <- data.frame(x = c(1, 2, 3,NA), y = c(1,0, 10, NA), z=c(43,NA, 33, NA))
Run Code Online (Sandbox Code Playgroud)
如果我只想省略x=na或者z=na,我可以|在哪里放入函数?
mne*_*nel 173
使用 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),]
Run Code Online (Sandbox Code Playgroud)
Ben*_*nes 73
您可以使用该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")
# x y z
# 1 1 0 NA
# 2 2 10 33
completeFun(DF, c("y", "z"))
# x y z
# 2 2 10 33
Run Code Online (Sandbox Code Playgroud)
编辑: 只返回没有NAs的行
如果要删除任何列中至少有一行的所有行NA,只需直接使用该complete.cases函数:
DF[complete.cases(DF), ]
# x y z
# 2 2 10 33
Run Code Online (Sandbox Code Playgroud)
或者,如果completeFun已经在您的工作流程中根深蒂固;)
completeFun(DF, names(DF))
Run Code Online (Sandbox Code Playgroud)
amr*_*rrs 58
哈德利tidyr刚刚获得了这个惊人的功能drop_na
library(tidyr)
DF %>% drop_na(y)
x y z
1 1 0 NA
2 2 10 33
Run Code Online (Sandbox Code Playgroud)
Rno*_*oob 28
使用'子集'
DF <- data.frame(x = c(1, 2, 3), y = c(0, 10, NA), z=c(NA, 33, 22))
subset(DF, !is.na(y))
Run Code Online (Sandbox Code Playgroud)
小智 5
现在,可以只使用:
na.omit(data, cols = c("x", "z"))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
183852 次 |
| 最近记录: |