我有一个包含 2500 行的数据框。一些行有 NA(过多的 NA),我想删除这些行。
我搜索了 SO 档案,并将其作为最可能的解决方案:
df2 <- df[df[, 12] != NA,]
但是当我运行它并查看 df2 时,我看到的只是一个充满 NA(和 s)的屏幕。
有什么建议么?
我有一个包含 2500 行的数据框。一些行有 NA(过多的 NA),我想删除这些行。
我搜索了 SO 档案,并将其作为最可能的解决方案:
df2 <- df[df[, 12] != NA,]
但是当我运行它并查看 df2 时,我看到的只是一个充满 NA(和 s)的屏幕。
有什么建议么?
根据您要寻找的内容,以下其中一项应该可以帮助您:
一些示例数据开始:
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