在 R 中删除带有 NA 的行

rwj*_*nes 1 r

我有一个包含 2500 行的数据框。一些行有 NA(NA 数量过多),我想删除这些行。

我搜索了 SO 档案,并提出了最可能的解决方案:

df2 <- df[df[, 12] != NA,]
Run Code Online (Sandbox Code Playgroud)

但是当我运行它并查看 df2 时,我看到的只是一个充满 NA(和 s)的屏幕。

有什么建议?

A5C*_*2T1 7

根据您正在寻找的内容,以下其中一项应该可以帮助您:

一些示例数据开始:

mydf <- data.frame(A = c(1, 2, NA, 4), B = c(1, NA, 3, 4), 
                   C = c(1, NA, 3, 4), D = c(NA, 2, 3, 4), 
                   E = c(NA, 2, 3, 4))
mydf
#    A  B  C  D  E
# 1  1  1  1 NA NA
# 2  2 NA NA  2  2
# 3 NA  3  3  3  3
# 4  4  4  4  4  4
Run Code Online (Sandbox Code Playgroud)

如果您只想根据几个特定列删除行,您可以使用complete.cases或@SimonO101 在评论中建议的解决方案。在这里,我要删除NA第一列中有 的行。

mydf[complete.cases(mydf$A), ]
#   A  B  C  D  E
# 1 1  1  1 NA NA
# 2 2 NA NA  2  2
# 4 4  4  4  4  4
mydf[!is.na(mydf[, 1]), ]
#   A  B  C  D  E
# 1 1  1  1 NA NA
# 2 2 NA NA  2  2
# 4 4  4  4  4  4
Run Code Online (Sandbox Code Playgroud)

相反,如果您想设置一个阈值——如“仅保留少于 2 个NA值的行”(但您不关心 NA 值在哪些列中——您可以尝试以下操作:

mydf[rowSums(is.na(mydf)) < 2, ]
#    A B C D E
# 3 NA 3 3 3 3
# 4  4 4 4 4 4
Run Code Online (Sandbox Code Playgroud)

在另一个极端,如果要删除所有具有任何 NA值的行,只需使用complete.cases

mydf[complete.cases(mydf), ]
#   A B C D E
# 4 4 4 4 4 4
Run Code Online (Sandbox Code Playgroud)