moyenne entre les lignes en double dans la R
J'ai un bloc de données df
avec des lignes qui sont des doublons pour les noms de colonne, mais pas pour les valeurs de la colonne:
name value etc1 etc2
A 9 1 X
A 10 1 X
A 11 1 X
B 2 1 Y
C 40 1 Y
C 50 1 Y
J'ai besoin d'agréger les noms en double dans une ligne, tandis que le calcul de la moyenne sur les valeurs de la colonne. La sortie attendue est comme suit:
name value etc1 etc2
A 10 1 X
B 2 1 Y
C 45 1 Y
J'ai essayé d'utiliser df[duplicated(df$name),]
mais bien sûr, cela ne me donne pas la moyenne sur les doublons. Je voudrais utiliser aggregate()
, mais le problème est que la partie la plus AMUSANTE de cette fonction s'applique à tous les autres colonnes, et parmi les autres problèmes, il ne sera pas en mesure de calculer char de contenu. Depuis toutes les autres colonnes ont le même contenu sur les "doublons", j'en ai besoin pour être regroupées comme c'est tout comme le nom de la colonne. Tous les conseils...?
etcX
aussi la garantie d'être la même pour les lignes avec le même name
?Oui je crois que oui, j'ai filtré dans l'étape précédente pour obtenir les mêmes matières.
Désolé, le résultat attendu était déjà inclus dans mon post, mais j'ai oublié de le dire dans ma phrase. Cela a été corrigé par l'utilisateur des paramètres.
OriginalL'auteur biohazard | 2013-06-29
Vous devez vous connecter pour publier un commentaire.
Ici un
data.table
solution. La solution est générale dans le sens où elle va travailler, même pour un ensemble de données.cadre avec 60 colonnes. Depuis que j'ai regrouper les données par toutes les variables différentes de la valeur( Voir comment je créer les touches ci-dessous)MODIFIER s'étendre à plus d'un valeur variable
Dans le cas où vous avez plusieurs variables numériques sur lesquels vous voulez calculer la moyenne , Par exemple, si vos données ressembler à ceci
La solution ci-dessus peut être étendu comme ceci :
Cela permettra de calculer la moyenne pour toutes les variables qui n'existent pas dans la liste des clés.
OriginalL'auteur agstudy
Vous pouvez utiliser
aggregate()
fonction comme ci-dessous:df$
à l'intérieur de l'agrégat parce qu'il a un argument données permet de spécifier la source de données (df dans ce cas). Il y a aussi une formule d'interface pour un montant total qui peut être plus facile à lire.OriginalL'auteur Homa Ghiasi
Le code (écrit par Métriques) est presque le travail, sauf dans un seul endroit (.nom). J'ai légèrement modifié:
Je ne connaissais pas ce soit. Merci de souligner ce point.
OriginalL'auteur S Das
En supposant que votre dataframe est df.
ddply()
ou est-il un raccourci technique?Va le faire, merci beaucoup 😀
OriginalL'auteur Metrics