R 如何删除包含特定数字的行

R 如何删除包含特定数字的行,r,R,我正在处理一个表,其中包含大量NAs和编号答案 看起来是这样的 structure(list(ID = c(101, 102, 103, 104, 105, 106, 107, 108, 109, 110), a = c(NA, 9, NA, NA, NA, NA, NA, NA, NA, NA), b = c(NA, 10, 9, 9, NA, NA, 2, NA, NA,NA), c = c(NA, NA, NA, 9, 1, NA, NA, 4, 11, 9), d = c(NA, NA,

我正在处理一个表,其中包含大量NAs和编号答案 看起来是这样的

structure(list(ID = c(101, 102, 103, 104, 105, 106, 107, 108, 109, 110), a = c(NA, 9, NA, NA, NA, NA, NA, NA, NA, NA), b = c(NA, 10, 9, 9, NA, NA, 2, NA, NA,NA), c = c(NA, NA, NA, 9, 1, NA, NA, 4, 11, 9), d = c(NA, NA, NA, NA, 8, NA, NA, 7, 9, 9), e = c(NA, NA, NA, NA, 9, NA, NA, 8, NA, 9), f = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), g = c(NA, NA, NA, NA, NA, NA, NA, 9, NA, NA)), .Names = c("ID", "a", "b", "c", "d", "e", "f", "g"), row.names = c(NA, -10L), class = c("tbl_df", "tbl", "data.frame"))
我要做的是删除只包含数字9的行。 在这种情况下,ID 103、104、110将是这种情况。我想把那3行去掉

我试过下面的代码

df1[rowSums(df1[-1]==9)==0,]
但是,由于表中有NAs,它只会复制NA表。
请帮助:(!

您可以使用
na.rm
参数忽略NAs:

df1[rowSums(df1[-1]==9, na.rm = TRUE) == 0, ]
但也要注意,这段代码只保留没有任何9的行,而这并不是您在问题中所要求的


评论后编辑:

在这种情况下,只需翻转:

df1[rowSums(df1[-1]!=9, na.rm = TRUE) > 0, ]

也许有一种更有效的方法,但我相信以下方法是有效的:

df1[!(apply(df1[-1] == 9, 1, prod, na.rm = TRUE) * !apply(is.na(df1[-1]), 1, prod)), ]

您可以使用
apply
检查整行:

df1[apply(df1[,-1], 1, function(x) !all(na.omit(x) == 9) | all(is.na(x))), ]

#    ID  a  b  c  d  e  f  g
# 1 101 NA NA NA NA NA NA NA
# 2 102  9 10 NA NA NA NA NA
# 5 105 NA NA  1  8  9 NA NA
# 6 106 NA NA NA NA NA NA NA
# 7 107 NA  2 NA NA NA NA NA
# 8 108 NA NA  4  7  8 NA  9
# 9 109 NA NA 11  9 NA NA NA

我使用
na。省略
以去除每行中的
na
-值,然后检查所有剩余值是否等于9。

感谢您的回答!但正如我所说,我想删除只有9的行。代码的结果显示ID 101、106和107没有任何9,但要添加的是,我想删除有数字的行9+其他数字(如ID 105、108、109)。尽管它删除了所有NAs行,但它仍然有效!非常感谢:)哇!这就是我想要的!非常感谢你!