2017-09-19 8 views
1

Excel Example J'essaie de regrouper mes données en fonction d'un certain nombre de variables avant de fournir un tableau récapitulatif indiquant la somme des valeurs de chaque groupe.Regroupement de données R plusieurs fois avant de faire la somme

J'ai créé les données ci-dessous à titre d'exemple.

Value <- c(21000,10000,50000,60000,2000, 4000, 5500, 10000, 35000, 40000) 
Group <- c("A", "A", "B", "B", "C", "C", "A", "A", "B", "C") 
Type <- c(1, 2, 1, 2, 1, 1, 1, 2, 2, 1) 
Matrix <- cbind(Value, Group, Type) 

Je veux regrouper les données ci-dessus d'abord par la variable « groupe », puis par la variable « type » pour résumer alors les valeurs et obtenir une sortie similaire à l'exemple ci-joint que je travaillais sur Excel. J'utiliserais habituellement la fonction d'agrégat si je voulais simplement regrouper par une variable, mais je ne suis pas sûr de pouvoir la traduire pour plusieurs variables? En plus de cela, j'ai besoin de fournir une table identique mais avec les valeurs calculées avec une fonction "count" plutôt qu'avec une "somme".

Un grand merci à l'avance!

+0

Toutes mes excuses, par exemple Excel devrait maintenant être attaché –

Répondre

1

Vous pouvez fournir plusieurs groupes à aggregate:

df <- data.frame(Value, Group, Type) 

> aggregate(df$Value, list(Type = df$Type, Group = df$Group), sum) 
    Type Group  x 
1 1  A 26500 
2 2  A 20000 
3 1  B 50000 
4 2  B 95000 
5 1  C 46000 
> aggregate(df$Value, list(Type = df$Type, Group = df$Group), length) 
    Type Group x 
1 1  A 2 
2 2  A 2 
3 1  B 1 
4 2  B 2 
5 1  C 3 

Il y a d'autres paquets qui peuvent être plus faciles à utiliser tels que data.table:

>library(data.table) 
>dt <- as.data.table(df) 
>dt[, .(Count = length(Value), Sum = sum(Value)), 
    by = .(Type, Group)] 

    Type Group Count Sum 
1: 1  A  2 26500 
2: 2  A  2 20000 
3: 1  B  1 50000 
4: 2  B  2 95000 
5: 1  C  3 46000 

dplyr est une autre option et @waskuf a un bon exemple de ça.

1

En utilisant dplyr (notez que "Matrix" doit être un data.frame):

library(dplyr) 
Matrix <- data.frame(Value, Group, Type) 

Matrix %>% group_by(Group, Type) %>% summarise(Sum = sum(Value), 
               Count = n()) %>% ungroup()