删除 R 中具有特定值的案例

Remove cases with a specific value in R

我想删除数据集中所有值为 9999 的行。 这是一个示例数据集:

df <- data.frame(a=c(1, 3, 4, 6, 9999, 9),
                 b=c(7, 8, 8, 7, 13, 16),
                 c=c(11, 13, 9999, 18, 19, 22),
                 d=c(12, 16, 18, 22, 29, 38))

所以最终的数据集将只包含第 1、2、4 和 6 行。我有一个大数据集,那么如何在不指定所有列的名称的情况下执行此操作?谢谢!

你可以这样做:

df[which(apply(df, 1, \(i) !any(i == 9999))),]
#>   a  b  c  d
#> 1 1  7 11 12
#> 2 3  8 13 16
#> 4 6  7 18 22
#> 6 9 16 22 38
 df[-which(df == 9999, TRUE)[,1], ]
  a  b  c  d
1 1  7 11 12
2 3  8 13 16
4 6  7 18 22
6 9 16 22 38

选项dplyr

library(dplyr)
df %>% 
   filter(!if_any(everything(), ~ . == 9999))

-输出

  a  b  c  d
1 1  7 11 12
2 3  8 13 16
3 6  7 18 22
4 9 16 22 38

across

df %>%
    filter(across(everything(), ~ . != 9999))