0
votes

Construire des colonnes séparées pour chaque catégorie de colonnes que les catégories sont mixtes

J'ai un sondage Dataframe contenant des évaluations de trois catégories. Je souhaite voir des évaluations de chaque catégorie dans chaque colonne, mais elle est mélangée comme celle-ci, xxx pré>

ce que je veux obtenir est: p> xxx pré> Cependant, essayez de plusieurs manières via stringr et dplyr, maintenant je suis bloqué ici: p>

ID  a1    a2    a3
1   c1-e1 c2-e1 c3-e2
2   c1-e1 c2-e0 c3-e2
3   c1-e1 c2-e2 c3-e0


3 commentaires

Quelle est la logique derrière les données initiales et votre sortie attendue? Ce n'est pas clair pour moi ce qui se passe ici.


@ThelaTemail Merci pour le commentaire et mes excuses pour l'explication! J'essaie de construire des variables indépendantes pour une analyse de régression. Dans ce cas, les évaluations de chaque catégories (C1, C2, C3) seraient trois variables indépendantes. Est-ce suffisant pour vous donner le contexte?


@THelaMILLILL Ainsi cette enquête a posé l'évaluation des répondants pour chaque catégorie. Mais l'ordre de question a été randomisé. Ils ont demandé à quelqu'un de l'ordre de C2> C1> C3 (ID 1 dans la première matrice), puis ils ont demandé à un autre comme C1> C3> C2 (ID 2). L'équipe de l'enquête n'a pas arrangé ces données par catégorie.


3 Réponses :


2
votes

Nous pourrions utiliser Split code> pour séparer les valeurs dans la colonne en fonction des noms de colonne.

Si vous avez des colonnes limitées, vous pouvez effectuer manuellement des colonnes (comme je l'ai fait) ou l'avoir utilisée de manière programmative en utilisant coller code> et SEQ code> en fonction de la structure de vos colonnes. p> xxx pré>

vous pouvez cbind code> la première colonne pour obtenir id code> colonne arrière. p> xxx pré >


Comme mentionné par @farah Nazifa Si nous voulons conserver la commande de ligne aussi bien pour chaque colonne, nous pouvons utiliser mapply code> comme suit. p>

col_values <- unlist(df[cols])
data.frame(mapply(function(x, y) x[y], 
    split(unlist(df[vals]), col_values), split(row(df[vals]), col_values)))

#    c1 c2 c3
#q41 e1 e1 e2
#q22 e1 e0 e2
#q63 e1 e2 e0


5 commentaires

La réponse est similaire mais pas exacte. Y a-t-il quelque chose de plus qui pourrait être fait?


@Farahnazifa ce qui manque dans la réponse?


C2 & C3 ne correspond pas à la sortie attendue


@Farahnazifa merci, vous avez peut-être raison. J'ai mis à jour la réponse pour ce cas aussi.


Je ne sais pas pourquoi mais "mapply" ne fonctionnait pas pour moi. Mais je pouvais apprendre à gérer ce genre de situation. Merci beaucoup!



0
votes

ressemble à une pile à long terme, puis un remodelage au format large y accomplira. Il y a environ 3,2 millions de variations sur cette logique, mais voici un:

reshape(tmp, idvar="ID", timevar="name", direction="wide")

#    ID value.c2 value.c1 value.c3
#1.1  1       e1       e1       e2
#2.1  2       e0       e1       e2
#3.1  3       e2       e1       e0


1 commentaires

Exactement ce que je cherchais! Je viens de supprimer parce que j'ai déjà défini ça avant. Et le commentaire grand format était vraiment utile aussi. Ma variable dépendante est sortie du cadre de données que j'ai téléchargée, il est donc important de garder le numéro de ligne et la commande. Maintenant, je vais rejoindre ceci à un ensemble de données plus grand. Merci beaucoup!



0
votes

Nous pouvons utiliser melt / dcast à partir de data.Table xxx

données xxx


4 commentaires

Cela me montre la réponse la plus proche que je voulais mais que je ne puisse pas garder l'ordre de la ligne d'origine. Puis-je vous poser une autre suggestion?


@ Ji-Wonlee Si je vérifie votre sortie attendue, c'est le même ordre. Peux-tu être plus précis


@ Ji-Wonlee Je suppose que votre commentaire est basé sur un autre jeu de données. Est-ce vrai


(+) Neverminet! Je pensais cela avec le commentaire d'autres. Merci pour votre aide Tho.