2013-05-02 103 views
0

我在这里看到类似的问题,但找不到任何帮助。删除具有特定条件的数据帧的行

我有这样一个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所有列,像第2行。

谢谢!

回答

2

试试这个(由阿伦编辑占多夫的职位):

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)会给你的逻辑矩阵。由于TRUE被评估为1,所以rowSums会给你每行TRUEna.rm=TRUE用于确保不会忽略包含NA的行(请参阅Dov的帖子)。将结果行号用于子集df

3

我要补充的是which函数似乎不是必须的。删除它会得到相同的结果。

在丢失数据的情况下,您会遇到第二个问题。如果您将一个NA添加到第三行(使用df[3,4] <- NA来尝试),那么上述解决方案的输出将忽略第三行,而不管其他条目的值如何。我不会建议替代方案,因为这对您的数据集可能不是问题。

+0

多夫,我想你应该建议替代品。这就是要点(得到*最佳答案):)。 – Arun 2013-05-02 06:50:25

+0

(+1)替代品总是很好的知道 – Nishanth 2013-05-02 07:31:34