r:删除任何列包含数字的行

时间:2017-06-19 16:25:12

标签: r

这几乎肯定是一个重复的问题,但我无法在任何地方找到答案。大多数其他类似问题涉及从一列进行子集化,而不是整个数据帧。

我有一个数据框:

test = data.frame(
'A' = c(.31562, .48845, .27828, -999),
'B' = c(.5674, 5.7892, .4687, .1345),
'C' = c(-999, .3145, .0641, -999))

我想删除任何列包含-999的行,以便我的数据框看起来像这样:

           A      B         C
2    0.48845 5.7892    0.3145
3    0.27828 0.4687    0.0641

我确信使用subset()函数或apply()可以轻松实现此目的,但我无法弄明白。

我试过了:

test[apply(test, MARGIN = 1, FUN = function(x) {-999 != x}), ]

但它返回:

              A      B         C
1       0.31562 0.5674 -999.0000
2       0.48845 5.7892    0.3145
4    -999.00000 0.1345 -999.0000
NA           NA     NA        NA
NA.1         NA     NA        NA
NA.2         NA     NA        NA
NA.3         NA     NA        NA
NA.4         NA     NA        NA
NA.5         NA     NA        NA

2 个答案:

答案 0 :(得分:2)

arr.indwhich一起使用,以获取-999所在的行(which(test == -999, arr.ind = TRUE)[,1])并删除这些行。

test[-unique(which(test == -999, arr.ind = TRUE)[,1]),]
#        A      B      C
#2 0.48845 5.7892 0.3145
#3 0.27828 0.4687 0.0641

答案 1 :(得分:0)

我们可以使用Reduce

test[!Reduce(`|`, lapply(test, `==`, -999)),]
#        A      B      C
#2 0.48845 5.7892 0.3145
#3 0.27828 0.4687 0.0641