R étalement de plusieurs colonnes avec tidyr [dupliquer]
cette question a déjà une réponse ici:
- Comment puis-je diffuser des mesures répétées de variables multiples dans un format large? 3 réponses
prendre cette variable d'échantillon
df <- data.frame(month=rep(1:3,2),
student=rep(c("Amy", "Bob"), each=3),
A=c(9, 7, 6, 8, 6, 9),
B=c(6, 7, 8, 5, 6, 7))
je peux utiliser spread
de tidyr
pour changer ceci en le grand format.
> df[, -4] %>% spread(student, A)
month Amy Bob
1 1 9 8
2 2 7 6
3 3 6 9
mais comment étaler deux valeurs par exemple A
et B
, de sorte que la sortie est quelque chose comme
month Amy.A Bob.A Amy.B Bob.B
1 1 9 8 6 5
2 2 7 6 7 6
3 3 6 9 8 7
65
demandé sur
docendo discimus
2015-06-02 12:22:39
1 réponses
Voici une solution possible à la fois simple et très efficace en utilisant data.table
library(data.table) ## v >= 1.9.6
dcast(setDT(df), month ~ student, value.var = c("A", "B"))
# month Amy_A Bob_A Amy_B Bob_B
# 1: 1 9 8 6 5
# 2: 2 7 6 7 6
# 3: 3 6 9 8 7
ou une possible tidyr
solution
df %>%
gather(variable, value, -(month:student)) %>%
unite(temp, student, variable) %>%
spread(temp, value)
# month Amy_A Amy_B Bob_A Bob_B
# 1 1 9 6 8 5
# 2 2 7 7 6 6
# 3 3 6 8 9 7
131
répondu
David Arenburg
2016-03-06 10:02:43