【问题标题】:R, using dplyr::mutate with ifelse containing a grepl() gives unexpected resultR,将 dplyr::mutate 与包含 grepl() 的 ifelse 一起使用会产生意想不到的结果
【发布时间】:2017-02-23 22:23:34
【问题描述】:

这个 ifelse 语句有什么问题。

df <- data.frame(var1=c('ABC','CAB', 'AB'))
dplyr::mutate(df, var2=ifelse(grepl('^AB',var1), 'AB-starter', var1))

  var1       var2
1  ABC AB-starter
2  CAB          3
3   AB AB-starter

我想要(使用 mutate 和 ifelse 语句)var2 的第二个元素中 var1 的值(即 'var1' 不以“AB”开头):

  var1       var2
1  ABC AB-starter
2  CAB        CAB
3   AB AB-starter

【问题讨论】:

    标签: r if-statement dplyr grepl


    【解决方案1】:

    由于 'var1' 是 factor,它被强制转换为 ifelse 内的整数值。我们可以通过as.character 避免它

    mutate(df, var2=ifelse(grepl('^AB',var1), 'AB-starter', as.character(var1)))
    

    或者在创建data.frame 时,使用stringsAsFactors=FALSE

    【讨论】:

    • 啊!我以为我已经测试了这种可能性(stringsAsFactors=F),但我在那一行中有错误的变量名称。事实证明,在熔化操作之后(在我的真实数据中),这个因素又回来了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-09
    • 2017-09-07
    • 1970-01-01
    • 2011-06-04
    • 2017-03-19
    • 2021-10-04
    • 1970-01-01
    相关资源
    最近更新 更多