首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用mutate_if更改值

如何使用mutate_if更改值
EN

Stack Overflow用户
提问于 2021-08-26 22:21:28
回答 4查看 330关注 0票数 1

在case a > 25中,如何使用mutate_if()b的值更改为NA

我可以用ifelse来做这件事,但我觉得mutate_if就是为这类任务而生的。

代码语言:javascript
复制
library(tidyverse)

tbl <- tibble(a = c(10, 20, 30, 40, 10, 60),
              b = c(12, 23, 34, 45, 56, 67))
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 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()

代码语言:javascript
复制
# 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, .))

它们都产生相同的输出:

代码语言:javascript
复制
# 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,但我怀疑你实际上并不需要它。

票数 3
EN

Stack Overflow用户

发布于 2021-08-26 23:50:54

mutate_if()变量应用一个谓词函数(返回TRUE或FALSE的函数)来确定相关的列子集。因此,mutate_if条件将应用于所有列,在下面提供的示例中,您可以看到它使用了。用法的例子是对数值字段执行数学运算等。

https://dplyr.tidyverse.org/reference/mutate

代码语言:javascript
复制
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
票数 4
EN

Stack Overflow用户

发布于 2021-08-27 00:16:31

我们可以使用replace

代码语言:javascript
复制
library(dplyr)
tbl %>%
      mutate(b = replace(b, a > 25, NA))

-output

代码语言:javascript
复制
# 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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68945954

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档