我有一个2500行的数据框。一些行具有NA(过多的NA),我想删除这些行。
我搜索了SO档案,并将其作为最可能的解决方案:
df2 <- df[df[, 12] != NA,]
但是当我运行它并查看df2时,我看到的只是一个充满NAs(和s)的屏幕。
有什么建议吗?
答案 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