如何从 R 中的整个数据框中删除特定值?

lot*_*tus 4 r dataframe remove-if

我有一个经过 z 分数转换的数据框。我想从数据框中删除(并转换为 NA)仅那些大于或等于 4 的值,而不删除任何行或列。我希望得到答复。

最好的

Qui*_*ten 8

您可以使用以下代码:

df <- data.frame(v1 = c(1,3,6,7,3),
                 v2 = c(2,1,4,6,7),
                 v3 = c(1,2,3,4,5))
df
#>   v1 v2 v3
#> 1  1  2  1
#> 2  3  1  2
#> 3  6  4  3
#> 4  7  6  4
#> 5  3  7  5
is.na(df) <- df >= 4
df
#>   v1 v2 v3
#> 1  1  2  1
#> 2  3  1  2
#> 3 NA NA  3
#> 4 NA NA NA
#> 5  3 NA NA
Run Code Online (Sandbox Code Playgroud)

由reprex 包于 2022 年 7 月 10 日创建(v2.0.1)


小智 8

您可以简单地使用df[df>=4] <- NA来实现您想要的。

df <- data.frame(replicate(10,sample(0:10,10,rep=TRUE)))

> df
   X1 X2 X3 X4 X5 X6 X7 X8 X9 X10
1   2  3  4  5  6  4  3  1 10   6
2   5  7  0  4  3 10 10  3  6  10
3   5  5  0  3  1  3  5  7  2   7
4   7  0  4  1 10  0  5  2  5   0
5   8  8  7  8  4  6  6 10 10   0
6   1  4  1  3  3  8  8  0  4   8
7   6  3  3  6  7  4 10  9  7   2
8   2  1  4  0  7  8 10  1  6   3
9   0  9  6  2  9  6  2  9  0   3
10  8  2  1  0  1  4  0  6  2   8



df[df>=4] <- NA

> df
   X1 X2 X3 X4 X5 X6 X7 X8 X9 X10
1   2  3 NA NA NA NA  3  1 NA  NA
2  NA NA  0 NA  3 NA NA  3 NA  NA
3  NA NA  0  3  1  3 NA NA  2  NA
4  NA  0 NA  1 NA  0 NA  2 NA   0
5  NA NA NA NA NA NA NA NA NA   0
6   1 NA  1  3  3 NA NA  0 NA  NA
7  NA  3  3 NA NA NA NA NA NA   2
8   2  1 NA  0 NA NA NA  1 NA   3
9   0 NA NA  2 NA NA  2 NA  0   3
10 NA  2  1  0  1 NA  0 NA  2  NA
Run Code Online (Sandbox Code Playgroud)


Tar*_*Jae 6

这里还有一个。replace_with_na_all()从包中使用naniar

\n\n
library(naniar)\nlibrary(dplyr)\n\ndf %>% \n  replace_with_na_all(condition = ~.x > 4)\n
Run Code Online (Sandbox Code Playgroud)\n
   v1    v2    v3\n  <dbl> <dbl> <dbl>\n1     1     2     1\n2     3     1     2\n3    NA     4     3\n4    NA    NA     4\n5     3    NA    NA\n
Run Code Online (Sandbox Code Playgroud)\n