2016-10-14 15 views
3

このifelse文には何が問題なのですか?R、grepl()を含むifelseでdplyr :: mutateを使用すると予期しない結果が発生する

df <- data.frame(var1=c('ABC','CAB', 'AB')) 
dplyr::mutate(df, var2=ifelse(grepl('^AB',var1), 'AB-starter', var1)) 

( 'var1が' "AB" で始まっていないときには)私が(変異しifelse文を使用して)var2での2番目の要素でVAR1の値を望んでいた

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

を与えます:

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

答えて

4

'var1が' factorであるように、ifelse内の値を整数に強制されます。私たちは、stringsAsFactors=FALSE

+1

ああを使用し、as.character

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

またはdata.frameを作成することによって、それを避けることができます!私はすでにその可能性をテストしたと思った(stringsAsFactors = F)が、私はその行に間違ったvariabel名を持っていた。溶融操作後(私の実際のデータで)、要因が戻ってきたことが分かります。 – user3375672

関連する問題