在R中删除带有NA的行[重复]
Posted
技术标签:
【中文标题】在R中删除带有NA的行[重复]【英文标题】:Removing rows with NA in R [duplicate] 【发布时间】:2013-11-25 10:03:45 【问题描述】:我有一个包含 2500 行的数据框。有几行有 NA(过多的 NA),我想删除这些行。
我搜索了 SO 档案,并认为这是最有可能的解决方案:
df2 <- df[df[, 12] != NA,]
但是当我运行它并查看 df2 时,我看到的只是一个充满 NA(和 s)的屏幕。
有什么建议吗?
【问题讨论】:
df[ ! is.na( df[, 12] ) , ]
定义每行有多少NA
s构成“过多”,然后使用rowSums
和is.na
。
如果一个“过多的数字”是任何..然后?complete.cases
。否则如阿难所说。
对,我应该更具体地说明“数量过多”。实际上,根据我所拥有的,我想在任何地方删除任何带有 NA 的行。我最终使用了西蒙的方法,它奏效了。但我需要弄清楚——我会的——如何使它更通用。谢谢。
【参考方案1】:
根据您正在寻找的内容,以下其中一项应该可以帮助您:
一些示例数据开始:
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
或 cmets 中@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
在另一个极端,如果您想删除 所有 具有 any NA
值的行,只需使用 complete.cases
:
mydf[complete.cases(mydf), ]
# A B C D E
# 4 4 4 4 4 4
【讨论】:
以上是关于在R中删除带有NA的行[重复]的主要内容,如果未能解决你的问题,请参考以下文章
R - 检查 r 数据框行的任何列中是不是存在 NA,如果存在,则删除该行 [重复]