#r #if-statement #dplyr #grepl
#r #оператор if #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) значение var1 во втором элементе var2 (то есть, когда ‘var1’ не начинается с «AB»):
var1 var2
1 ABC AB-starter
2 CAB CAB
3 AB AB-starter
Ответ №1:
Поскольку ‘var1’ является a factor
, он преобразуется к целочисленному значению внутри ifelse
. Мы можем избежать этого, as.character
mutate(df, var2=ifelse(grepl('^AB',var1), 'AB-starter', as.character(var1)))
или при создании data.frame
, используйте stringsAsFactors=FALSE
Комментарии:
1. Ах! Я думал, что уже проверял эту возможность (stringsAsFactors=F), но у меня было неправильное имя переменной в этой строке. Оказывается, что после операции плавления (в моих реальных данных) фактор вернулся.