R ifelse changed factor value into index

家住魔仙堡 提交于 2019-12-12 01:39:26

问题


I met a weird problem when I am using R, I'm using data.table:

Here, when I tried to convert those Province has count under 500 to "Other", the output changes the top count Provinces into index number

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)]

Output:

But, this method worked well on those factor variables which values are in numeric format. For example, instead of using Province, if I use BranchNumber, the values look like "1", "3", I got the input like this, which is good:

Do you know, why this happened and how to resolve the problem?


回答1:


This is probably a side effect of ifelse, which has a bad habit of changing the class of its return value unpredictably. Try this instead:

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

Generally, I would recommend working with character vectors as data.table columns instead of factors whenever possible.



来源:https://stackoverflow.com/questions/39842936/r-ifelse-changed-factor-value-into-index

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!