删除R中包含NA的行

时间:2013-11-13 00:40:36

标签: r

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

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

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

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

有什么建议吗?

1 个答案:

答案 0 :(得分:3)

根据您的要求,以下其中一项应该可以帮助您:

开始时的一些示例数据:

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