我在这里看到过类似的问题,但我找不到任何帮助。
我有这样的df:
df <- data.frame(CSF1=c(-9,-9,-9,-9), CSF2=c(-9,-1,-9,-9),
D13S1=c(-9,-9,11,11), D13S2=c(-9,-9,11,12))
CSF1 CSF2 D13S1 D13S2
10398 -9 -9 -9 -9
10398 -9 -1 -9 -9
20177 -9 -9 11 11
20361 -9 -9 11 12
我想删除所有列的值为-9或-1的所有行,例如前两行。
谢谢!
答案 0 :(得分:3)
我要补充的是which
功能似乎没有必要。删除它会产生相同的结果。
在数据丢失的情况下,您会遇到第二个问题。如果,您将NA
添加到第3行(使用df[3,4] <- NA
尝试),则上述解决方案的输出将省略第3行,而不管其他条目的值。我不会建议替代方案,因为这可能不是您数据集的问题。
答案 1 :(得分:2)
试试这个(由Arun编辑以说明Dov的帖子):
df[rowSums(df == -1 | df == -9, na.rm = TRUE) != ncol(df), ]
## CSF1 CSF2 D13S1 D13S2
## 3 -9 -9 11 11
## 4 -9 -9 11 12
(df == -1 | df == -9)
将为您提供逻辑矩阵。由于rowSums
被评估为TRUE
,TRUE
会在每行中为1
计算。 na.rm=TRUE
是为了确保不会省略NA
行(请参阅Dov的帖子)。将结果行号用于子集df
。