1

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

我搜索了 SO 档案,并将其作为最可能的解决方案:

df2 <- df[df[, 12] != NA,]

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

有什么建议么?

4

1 回答 1

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

如果您只想根据几个特定列删除行,您可以使用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

相反,如果您想设置一个阈值——如“只保留少于 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

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

mydf[complete.cases(mydf), ]
#   A B C D E
# 4 4 4 4 4 4
于 2013-11-13T02:31:53.043 回答