2016-10-14 67 views
3

這個ifelse語句有什麼問題。R,使用dplyr :: mutate和包含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 

我想在VAR2的第二個元素(使用發生變異和ifelse語句)VAR1的值(即當 '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

啊!我以爲我已經測試過這種可能性(stringsAsFactors = F),但我在該行中有錯誤的變量名。事實證明,在融化操作之後(在我的真實數據中)這個因素又回來了。 – user3375672

相關問題