2016-10-04 1 views
0

j'ai rencontré un problème bizarre quand je suis en utilisant R, j'utilise data.table:R valeur du facteur ifelse changé dans l'indice

Ici, quand j'ai essayé de convertir les province a compter moins de 500 à « Autre » , la sortie change le décompte haut provinces en nombre d'index

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

sortie: p1

Mais, cette méthode a bien fonctionné sur les variables de facteur dont les valeurs sont en numérique fo rmat. Par exemple, au lieu d'utiliser la province, si j'utilise branchNumber, les valeurs ressemblent à « 1 », « 3 », je suis l'entrée comme celui-ci, ce qui est bon:

p2

Savez-vous, pourquoi cela est arrivé et comment résoudre le problème?

+3

Ceci est probablement un effet secondaire de 'ifelse' qui a une mauvaise habitude de changer la classe de sa valeur de retour de façon imprévisible. Essayez 'fact_data [Province% in% df, Province: =" Autre "]' à la place. – Frank

+1

Génial! Ça marche. J'ai juste besoin de changer la logique précédente en 'df <- fact_data [,. N, Province] [N <500] $ Province', puis avec' fact_data [Province% en% df, Province: = "Autre"] ', J'ai ce que je veux. Merci beaucoup!! –

+1

Cool. Fyi, vous pouvez aussi le nier comme '! (Province% in% df)', pensant que cela pourrait rendre le code plus confus (comparé au changement de l'inégalité). – Frank

Répondre

1

Ceci est probablement un effet secondaire de ifelse, qui a la mauvaise habitude de changer la classe de sa valeur de retour de façon imprévisible. Essayez ceci:

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

En général, je recommande de travailler avec des vecteurs de caractères sous forme de colonnes data.table au lieu des facteurs chaque fois que possible.