J'ai des données: et je voudrais vous retrouver avec: p> J'ai essayé la propagation mais je ne peux pas atteindre une ligne par incident; Je ne pense pas avoir un moyen de créer une paire de valeur clé alors je me demande s'il y a une autre méthode pour le faire. P> p>
5 Réponses :
Voici ma solution:
df %>% select(-rowID) %>% group_by(incidentID) %>% nest() %>% mutate(data = map_chr(data, ~str_c(.x$participant.type, collapse = '_'))) %>% separate(data, paste0('participant.type.', 0:2)) %>% mutate_at(2:4, ~replace_na(.x, ''))
Nous pouvons utiliser avec les données p> reshape2 :: dcast code> pour ce
Avant d'utiliser Spread () code>, vous devez créer une touche code> appropriée CODE> argument.
df %>% select(-rowID) %>%
group_by(incidentID) %>%
mutate(id = 1:n()) %>%
spread(id, participant.type)
# incidentID `1` `2` `3`
# <int> <fct> <fct> <fct>
# 1 1 A B NA
# 2 2 A NA NA
# 3 3 A B C
# 4 4 B C NA
C'est la meilleure solution.
Le lien "Question associé" fournie par @Markus affiche une variété d'autres solutions, notamment ce qui semble être le plus concis dans un format diede: donne: p> a p> p>
Si vous ne supprimez pas la variable Rowid code>, la sortie ne sera pas ce que vous affichez ci-dessus. Et votre solution est équivalente à la mienne. Vous n'avez pas besoin de la poster à nouveau.
J'apprécie votre aide, je pense que j'ai posté le code sur la base du lien avant de voir le vôtre. J'ai marqué le vôtre comme la solution.
Étant donné que votre regroupement est basé sur la commande à ligne dans la colonne ICIENIDID. La solution simple suivante fonctionnera également.
Il ne fait que filtrer le fichier de données, puis la fusionner à la fin. P>
Ce n'est probablement pas la meilleure solution en termes d'utilisation efficace de la puissance de calcul, mais c'est Facile à comprendre. p> résultat: p>
La quatrième rangée doit être
A code>, pas
b c code>.
Oui merci, corrigé
Associé Transpose / Remoderataframe sans "Timevar" de long à Format large
Ce lien fournit plusieurs solutions et j'en ai ajouté l'un d'entre eux comme une réponse ci-dessous, merci