R,将 dplyr::mutate 与包含 grepl() 的 ifelse 一起使用会产生意想不到的结果
R, using dplyr::mutate with ifelse containing a grepl() gives unexpected result
这个 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
由于 'var1' 是 factor
,它被强制转换为 ifelse
内的整数值。我们可以通过 as.character
来避免它
mutate(df, var2=ifelse(grepl('^AB',var1), 'AB-starter', as.character(var1)))
或者在创建 data.frame
时,使用 stringsAsFactors=FALSE
这个 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
由于 'var1' 是 factor
,它被强制转换为 ifelse
内的整数值。我们可以通过 as.character
mutate(df, var2=ifelse(grepl('^AB',var1), 'AB-starter', as.character(var1)))
或者在创建 data.frame
时,使用 stringsAsFactors=FALSE