删除具有特定条件的数据帧的行

时间:2013-05-02 04:59:18

标签: r dataframe

我在这里看到过类似的问题,但我找不到任何帮助。

我有这样的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 个答案:

答案 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被评估为TRUETRUE会在每行中为1计算。 na.rm=TRUE是为了确保不会省略NA行(请参阅Dov的帖子)。将结果行号用于子集df