R,使用包含grepl()的ifelse的dplyr :: mutate会产生意想不到的结果

时间:2016-10-14 13:06:40

标签: r if-statement dplyr grepl

这个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

1 个答案:

答案 0 :(得分:5)

As&#39; var1&#39;是factor,它会被强制转换为ifelse内的整数值。我们可以通过as.character

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

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