删除 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))
我想删除数据集中所有值为 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))