À l'aide de propagation avec les mêmes identifiants pour les lignes
J'ai un dataframe qui ont plusieurs entrées pour le même jour et par personne.
jj <- data.frame(month=rep(1:3,4),
student=rep(c("Amy", "Bob"), each=6),
A=c(9, 7, 6, 8, 6, 9, 3, 2, 1, 5, 6, 5),
B=c(6, 7, 8, 5, 6, 7, 5, 4, 6, 3, 1, 5))
Je veux convertir à l'échelle, la forme et le faire comme ça:
month Amy.A Bob.A Amy.B Bob.B
1
2
3
1
2
3
1
2
3
1
2
3
Ma question est très similaire à cette. J'ai utilisé le code donné dans la réponse :
kk <- jj %>%
gather(variable, value, -(month:student)) %>%
unite(temp, student, variable) %>%
spread(temp, value)
mais il donne l'erreur suivante:
Erreur: Duplicate identificateurs pour les lignes (1, 4), (2, 5), (3, 6), (13, 16), (14, 17), (15, 18), (7, 10), (8, 11), (9, 12), (19, 22), (20, 23), (21, 24)
Merci à l'avance.
Note: je ne veux pas supprimer plusieurs entrées.
- La sortie ne fait pas de sens. Comment est Bob.B
5 6 7
. Il y a deux Bob valeurs de B pour le mois 1,5 3
? Et pour le mois 2, il est4 and 2
. Enfin, pour les mois à 36 5
. Résumé de ces à une valeur.
Vous devez vous connecter pour publier un commentaire.
La question, les deux colonnes pour les deux
A
etB
. Si nous pouvons le faire qu'une valeur de la colonne, nous pouvons répartir les données que vous le souhaitez. Jetez un oeil à la sortie dejj_melt
lorsque vous utilisez le code ci-dessous.Je ne marque pas cela comme un doublon puisque la question n'a pas résumer par
sum
, mais ledata.table
réponse pourrait aider avec un argument supplémentaire,fun=sum
:Si vous souhaitez utiliser le
tidyr
solution, les combiner avec d'dcast
résumer parsum
.Modifier
Basé sur vos exigences nouvelles, j'ai ajouté une colonne activité.
Les autres solutions peuvent également être utilisés. Ici j'ai ajouté une expression en option pour organiser la sortie finale par activité nombre:
La
data.table
syntaxe est compact, car il permet de multiplesvalue.var
colonnes et prendra soin de la propagation pour nous. Nous pouvons donc ignorer lamelt -> cast
processus.dcast(month + id ~ temp, value.var="value")
. Nous avons utilisé quelques astuces pour la raccourcir. Les trois petits points (toutes les autres colonnes) fait en sorte que nous n'aurions pas à écriremonth + id
et nous n'avons pas eu à écrirevalue.var="value"
parce que la fonction va deviner la valeur de la colonne à l'aide de la dernière colonne.Votre réponse manquait muter id! Voici la solution à l'aide de dplyr packge seulement.
%>% select(-id)
à la fin.De vérifier si vous avez inversé la clé et la valeur. "Clé" est le nom de la nouvelle clé et la "valeur" est la valeur réelle.