Voici un exemple simplifié:factoriser par programme les colonnes sélectionnées dans le cadre de données, la manière ordonnée?
library(tidyverse)
frame <- tribble(
~a, ~b, ~c,
1, 1, 2,
5, 4, 7,
2, 3, 4,
3, 1, 6
)
key <- tribble(
~col, ~name, ~type, ~labels,
1, "a", "f", c("one", "two", "three", "four", "five"),
2, "b", "f", c("uno", "dos", "tres", "cuatro"),
3, "c", "f", 1:7
)
Y at-il une façon élégante de balayer à travers les colonnes programme en frame
et en appliquant la classe spécifique de facteur, en fonction des paramètres de key
? Le résultat attendu serait:
# A tibble: 4 x 3
a b c
<fctr> <fctr> <fctr>
1 one uno 2
2 five cuatro 7
3 two tres 4
4 three uno 6
La meilleure solution que je l'ai jusqu'à présent est utilise purrr
« s map2()
mais avec mission qui est l'OMI pas le plus élégant:
frame[key$col] <- map2(key$col, key$labels,
function(x, y) factor(frame[[x]], levels = 1:length(y), labels = y))
Quelqu'un at-il un plus bien rangé Solution? Notez que mon bloc de données original contient des centaines de colonnes et que j'ai besoin de re-factoriser avec différents niveaux/labels la majorité d'entre eux, donc le processus doit être automatisé.
Hadley a un paquet 'forcats', si cela semble intéressant. – lmo
Merci, je l'ai jeté un coup d'oeil et c'est assez sympa - mais il ne fournit pas directement de fonctions pour manipuler les trames de données comme je le voudrais ... – Krizbi