2017-08-07 3 views
0

J'ai les données dans le format suivant.Convertir la plage de valeurs en noms

ID LoanAmtBin 
1 20000 
2 120000 
3 90000 
4 50000 
5 50000 

Je voudrais changer les valeurs dans une plage à un nom. Par exemple, si un prêt est compris entre 0 et 10 000, il devrait avoir le nom 10K, si son entre 10001 et 25 000, il devrait avoir le nom 25K etc.

table souhaitée:

ID LoanAmtBin 
1 25K 
2 250K 
3 100K 
4 50K 
5 50K 

Je l'ai déjà a converti la colonne LoanAmtBin en numérique. Ensuite, j'utilise la ligne de code suivante pour convertir chaque valeur en un nom.

LAmtCut <- cut(cleancc$LoanAmtBin, breaks = c(0, 10000, 25000, 50000, 100000, 250000, 500000, 1000000), 
      labels = c("10K", "25K", "50K", "100K", "250K", "500K", "1Mil")) 

Lorsque j'exécute le LAmtCut, il affiche les étiquettes que je veux dans la console. Cependant, la colonne de mon bloc de données ne change pas. Comment puis-je modifier les valeurs de la trame de données?

Répondre

1

La raison pour laquelle votre trame de données (DF) ne change pas est que la fonction cut génère un vecteur, mais que vous n'attribuez pas cette sortie à une colonne de votre DF. Si vous voulez mettre à jour votre DF, vous devez réassigner le résultat à une colonne. Vous pouvez utiliser l'opérateur $ pour le faire.

Exemple:

test <- data.frame(ID = c(10000, 20000, 20000, 30000, 30000, 40000)) 

# outputs a factor vector 
labs <- cut(test$ID, breaks = c(0, 10000, 20000, 30000, 40000, 50000), 
    labels = c("10k", "20k", "30k", "40k", "50k")) 

# updates the data frame 
test$ID <- labs 

Notez que ID est un aussi bien variables factor plutôt qu'une variable de caractère, ce qui est quelque chose à garder à l'esprit que vous continuez votre analyse parce qu'ils diffèrent dans la façon dont ils peuvent être exploités sur.

+0

Correctif simple, merci. – Eitan