J'ai un bloc de données avec deux colonnes. La première colonne contient des catégories telles que "Première", "Deuxième", "Troisième", et la deuxième colonne a des nombres qui représentent le nombre de fois où j'ai vu les groupes spécifiques de "Catégorie".
Par exemple:
Category Frequency
First 10
First 15
First 5
Second 2
Third 14
Third 20
Second 3
Je veux trier les données par catégorie et additionner toutes les fréquences:
Category Frequency
First 30
Second 5
Third 34
Comment pourrais-je faire cela dans R?
rowsum
.Réponses:
En utilisant
aggregate
:Dans l'exemple ci-dessus, plusieurs dimensions peuvent être spécifiées dans le
list
. Plusieurs métriques agrégées du même type de données peuvent être intégrées viacbind
:(intégrant le commentaire @thelatemail),
aggregate
possède également une interface de formuleOu si vous souhaitez agréger plusieurs colonnes, vous pouvez utiliser la
.
notation (fonctionne également pour une colonne)ou
tapply
:En utilisant ces données:
la source
Vous pouvez également utiliser le package dplyr à cet effet:
Ou, pour plusieurs colonnes récapitulatives (fonctionne également avec une colonne):
Voici quelques exemples supplémentaires de récapitulation des données par groupe à l'aide des fonctions dplyr à l'aide du jeu de données intégré
mtcars
:Pour plus d'informations, y compris l'
%>%
opérateur, consultez l' introduction à dplyr .la source
funs()
argumentsummarise_all
et ses fonctions associées (summarise_at
,summarise_if
)La réponse fournie par rcs fonctionne et est simple. Cependant, si vous manipulez des ensembles de données plus volumineux et avez besoin d'une amélioration des performances, il existe une alternative plus rapide:
Comparons cela à la même chose en utilisant data.frame et ce qui précède:
Et si vous souhaitez conserver la colonne, voici la syntaxe:
La différence deviendra plus visible avec des ensembles de données plus importants, comme le montre le code ci-dessous:
Pour plusieurs agrégations, vous pouvez combiner
lapply
et.SD
comme suitla source
data[, sum(Frequency), by = Category]
. Vous pouvez utiliser.N
ce qui remplace lasum()
fonction.data[, .N, by = Category]
. Voici une astuce utile: s3.amazonaws.com/assets.datacamp.com/img/blog/…Vous pouvez également utiliser la fonction by () :
Ces autres packages (plyr, remodelage) ont l'avantage de renvoyer un data.frame, mais cela vaut la peine d'être familier avec by () car c'est une fonction de base.
la source
Plusieurs années plus tard, juste pour ajouter une autre solution de base R simple qui n'est pas présente ici pour une raison quelconque-
xtabs
Ou si vous voulez un
data.frame
retourla source
la source
Si
x
est une trame de données avec vos données, alors ce qui suit fera ce que vous voulez:la source
Bien que je sois récemment devenu un converti
dplyr
pour la plupart de ces types d'opérations, lesqldf
paquet est toujours très agréable (et à mon humble avis plus lisible) pour certaines choses.Voici un exemple de réponse à cette question
sqldf
la source
Juste pour ajouter une troisième option:
EDIT: c'est une réponse très ancienne. Maintenant, je recommanderais l'utilisation de
group_by
etsummarise
depuisdplyr
, comme dans la réponse @docendo.la source
Je trouve
ave
très utile (et efficace) lorsque vous devez appliquer différentes fonctions d'agrégation sur différentes colonnes (et vous devez / voulez vous en tenir à la base R):par exemple
Compte tenu de cette entrée:
nous voulons regrouper par
Categ1
etCateg2
et calculer la somme deSamples
et la moyenne deFreq
.Voici une solution possible en utilisant
ave
:Résultat :
la source
L'ajout récemment
dplyr::tally()
fait maintenant plus facile que jamais:la source
Vous pouvez utiliser la fonction
group.sum
du package Rfast .Rfast a de nombreuses fonctions de groupe et en
group.sum
fait partie.la source
utiliser à la
cast
place derecast
(la note'Frequency'
est maintenant'value'
)obtenir:
la source
Une autre solution qui renvoie des sommes par groupes dans une matrice ou une trame de données et est courte et rapide:
la source
Depuis
dplyr 1.0.0
, laacross()
fonction pourrait être utilisée:Si vous êtes intéressé par plusieurs variables:
Et la sélection des variables à l'aide des assistants de sélection:
Exemples de données:
la source