2016-10-14 2 views
3

Что не так с этим утверждением ifelse.R, используя dplyr :: mutate with ifelse, содержащий grepl(), дает неожиданный результат

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 

Я хотел (с помощью мутировать и IfElse заявление) значение var1 во втором элементе var2 (то есть, когда 'var1' не начинается с "AB"):

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

ответ

4

в «var1» является factor, он получает принуждать целое значение в пределах ifelse. Мы можем избежать этого as.character

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

или при создании data.frame, используйте stringsAsFactors=FALSE

+1

Ах! Я думал, что я уже тестировал эту возможность (strAsAsFactors = F), но у меня было неправильное имя переменной в этой строке. Оказывается, после операции расплава (по моим реальным данным) фактор вернулся. – user3375672

Смежные вопросы