2016-10-04 110 views
0

我,當我,使用R遇到了一個奇怪的問題,我使用data.table:[R ifelse變化因子值成指數

在這裏,當我試圖轉換這些省500下數到「其他」時,輸出改變所述頂端計數省成索引號

df <- fact_data[,.N,Province][N >= 500]$Province 
df 
fact_data[,Province := ifelse(Province %in% df, fact_data$Province, "Other")] 
fact_data[,.N,Province][order(-N)] 

輸出: p1

但是,這種方法對這些因素的變量,其值是在數字FO運作良好RMAT。例如,不使用省,如果我用BranchNumber,值看起來像「1」,「3」,我得到了這樣的投入,這是很好的:

p2

你知道,爲什麼發生這種情況以及如何解決問題?

+3

這可能是'ifelse'的一個副作用,它具有不可預知地改變其返回值類的壞習慣。試試'fact_data [%%%df,省:=「其他」]''。 – Frank

+1

太棒了!有用。我只需要將'df < - fact_data [,.N,省] [N <500] $省',然後用'fact_data [%df省,%:=「其他」]'我得到了我想要的。非常感謝你!! –

+1

很酷。 Fyi,你也可以像'!(%%in%df)'那樣否定它,認爲這會使代碼更加混亂(與改變不等式相比)。 – Frank

回答

1

這可能是ifelse的副作用,它具有不可預知地改變其返回值類的壞習慣。試試這個:

fact_data[ !(Province %in% df), Province := "Other" ] 

一般來說,我會建議與特徵向量的工作因素data.table列,而不是隻要有可能。