首页 > 解决方案 > R如何使用dplyr::mutate和if_else根据条件更改变量的值?

问题描述

我正在尝试更改 data.frame 中变量的值,如果满足条件,则变量采用另一个值,如果不满足条件,则变量采用其原始值。我很困惑为什么会出现错误,并且想知道如何修改代码以克服此错误。

例如,假设我有以下数据集x,并且我想创建一个新变量var3,这样如果满足条件,var3则取 1,如果不满足,var3则取其旧值。

x = data.frame(var1 = c('a', 'b', 'ab'),
               var2 = rep(2,3))
x
x %>%
  dplyr::mutate(var3 = 0,
                var3 = if_else(grep('a', var1)==1, 1, var3))

如果我运行此代码,我会收到以下错误

Error in mutate_impl(.data, dots) : 
  Column `var3` must be length 3 (the number of rows) or one, not 2

正确答案是

  var1 var2 var3
1    a    2    1
2    b    2    0
3   ab    2    1

我的真实代码更复杂,我需要var3在条件评估时取其旧值FALSE,而不仅仅是一个奇异值(比如0)。

我在这里做错了什么?

标签: rif-statementdplyr

解决方案


使用 str_detect 回答:

library(tidyverse)

x = data.frame(var1 = c('a', 'b', 'ab'),
               var2 = rep(2,3))
x

x %>%
    dplyr::mutate(var3 = 0,
                  var3 = if_else(str_detect(var1,'a'), 1, var3))

推荐阅读