在case a > 25中,如何使用mutate_if()将b的值更改为NA
我可以用ifelse来做这件事,但我觉得mutate_if就是为这类任务而生的。
library(tidyverse)
tbl <- tibble(a = c(10, 20, 30, 40, 10, 60),
b = c(12, 23, 34, 45, 56, 67))发布于 2021-08-26 23:05:22
在这个小示例中,我不确定您是否真的需要mutate_if()。mutate_if旨在使用_if部件来确定要子集和处理的列,而不是在修改值时使用if条件。
相反,您可以使用mutate_at()来选择要操作的列-可以基于列的确切名称,也可以使用vars(contains('your_string'))。
有关mutate_*函数的更多信息,请参见帮助页面:https://dplyr.tidyverse.org/reference/mutate
这里有3个选项,分别使用mutate()和mutate_at()
# using mutate()
tbl %>%
mutate(
b = ifelse(a > 25, NA, b)
)
# mutate_at - we select only column 'b'
tbl %>%
mutate_at(vars(c('b')), ~ifelse(a > 25, NA, .))
# select only columns with 'b' in the col name
tbl %>%
mutate_at(vars(contains('b')), ~ifelse(a > 25, NA, .))它们都产生相同的输出:
# A tibble: 6 x 2
a b
<dbl> <dbl>
1 10 12
2 20 23
3 30 NA
4 40 NA
5 10 56
6 60 NA我知道它不是mutate_if,但我怀疑你实际上并不需要它。
发布于 2021-08-26 23:50:54
mutate_if()变量应用一个谓词函数(返回TRUE或FALSE的函数)来确定相关的列子集。因此,mutate_if条件将应用于所有列,在下面提供的示例中,您可以看到它使用了。用法的例子是对数值字段执行数学运算等。
https://dplyr.tidyverse.org/reference/mutate
function (.tbl, .predicate, .funs, ...)
library(dplyr)
# Below code gets the job done but as Hugh Allan explained it is probably not
the right approach
tbl %>%
mutate_if(colnames(tbl) != 'a', ~ifelse(a > 25, NA, .))
# A tibble: 6 x 2
a b
<dbl> <dbl>
1 10 12
2 20 23
3 30 NA
4 40 NA
5 10 56
6 60 NA发布于 2021-08-27 00:16:31
我们可以使用replace
library(dplyr)
tbl %>%
mutate(b = replace(b, a > 25, NA))-output
# A tibble: 6 x 2
a b
<dbl> <dbl>
1 10 12
2 20 23
3 30 NA
4 40 NA
5 10 56
6 60 NAhttps://stackoverflow.com/questions/68945954
复制相似问题