lot*_*tus 4 r dataframe remove-if
我有一个经过 z 分数转换的数据框。我想从数据框中删除(并转换为 NA)仅那些大于或等于 4 的值,而不删除任何行或列。我希望得到答复。
最好的
您可以使用以下代码:
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)
这里还有一个。replace_with_na_all()
从包中使用naniar
:
replace_with_na_all()
当您想要替换整个数据集中满足条件的所有值时使用。这里的语法有点不同,遵循简单函数的 rlang\xe2\x80\x99s 表达规则。这意味着该函数以 开头~
,并且在引用变量时使用.x
.\n https://cran.r-project.org/web/packages/naniar/vignettes/replace-with-na.htmllibrary(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
归档时间: |
|
查看次数: |
3406 次 |
最近记录: |