2017-06-01 2 views
1

Comment changer les noms de niveau d'un ensemble de facteurs?
S'il vous plaît vérifier le F1 de Example df, F1 est un facteur de 6 niveaux (0 ~ 5). Comment changer F1 en 3 niveaux (1,2,3)?Comment changer les noms de niveau d'un ensemble de facteurs?

par exemple: si F1 == 0 or 1, le nouveau nom de niveau est 1, si F1 == 2 or 3, le nouveau nom de niveau est 2, si F1 == 4 or 5, le nouveau nom de niveau est 3. Comme Expected Outcome.

library(plyr) 
revalue(df$F1, c("0"="1", "1"="1","2"="2", "3"="2","4"="3", "5"="3")) 
# I could do this but if there are tens or hundreds of levels, 
# I will need to do this one by one, there must be a more convenient way. 

Exemple df

Volume Weight F1 F2 
1: 0.5367 0.5367 0 1 
2: 0.8645 0.8508 0 0 
3: 0.8573 0.8585 0 0 
4: 1.1457 1.1413 1 0 
5: 0.8573 0.8568 1 0 
6: 0.5694 0.5633 1 1 
7: 1.2368 1.2343 2 0 
8: 0.9662 0.9593 2 1 
9: 1.4850 1.3412 2 0 
10: 1.4850 1.3995 2 0 
11: 1.1132 1.1069 3 1 
12: 1.4535 1.3923 3 0 
13: 1.0437 1.0344 3 1 
14: 1.1475 1.1447 4 1 
15: 1.1859 1.1748 4 0 
16: 1.1859 1.1735 4 0 
17: 1.1859 1.1731 4 0 
18: 1.1557 1.1552 5 1 
19: 1.1749 1.1731 5 0 
20: 1.1749 1.1552 5 0 

Résultat attendu

Volume Weight F1 F2 
1: 0.5367 0.5367 1 1 
2: 0.8645 0.8508 1 0 
3: 0.8573 0.8585 1 0 
4: 1.1457 1.1413 1 0 
5: 0.8573 0.8568 1 0 
6: 0.5694 0.5633 1 1 
7: 1.2368 1.2343 2 0 
8: 0.9662 0.9593 2 1 
9: 1.4850 1.3412 2 0 
10: 1.4850 1.3995 2 0 
11: 1.1132 1.1069 2 1 
12: 1.4535 1.3923 2 0 
13: 1.0437 1.0344 2 1 
14: 1.1475 1.1447 3 1 
15: 1.1859 1.1748 3 0 
16: 1.1859 1.1735 3 0 
17: 1.1859 1.1731 3 0 
18: 1.1557 1.1552 3 1 
19: 1.1749 1.1731 3 0 
20: 1.1749 1.1552 3 0 
+1

S'il y a des dizaines ou des centaines de niveaux, quelle est la règle pour les recoder? Niveau le plus bas en «1», puis toutes les deux valeurs après que s'est effondré ensemble, donc «2 + 3», «4 + 5», «6 + 7», etc? Si la question est de savoir comment l'étendre à un grand nombre de niveaux, vous devez expliquer la règle. – Marius

+2

Que diriez-vous de 'df $ F1 <- facteur (1 + as.numérique (df $ F1)% /% 2)' –

+2

Ou: 'df [, F1: = étage (F1/2) + 1]' – Jaap

Répondre

2

Nous pouvons utiliser des méthodes data.table que l'objet est un data.table

library(data.table) 
df[, F1 := factor((F1 %/% 2)+1)] 
+2

Aucune idée J'ai aussi voté. – Jimmy