2016-12-16 6 views
-1

Ich habe ein Datenrahmen wie folgt aus:Sum Spalte mit einer Bedingung in R

df <- data.frame(a=c(111,111,111,222,222,222,333,333,333), 
       b=c(1,0,1,1,1,1,0,0,1)) 
df 
    a b 
1 111 1 
2 111 0 
3 111 1 
4 222 1 
5 222 1 
6 222 1 
7 333 0 
8 333 0 
9 333 1 

Ich brauche für jeden 'a' die Summe der Spalte 'b' erhalten:

A B 
1 111 2 
2 222 3 
3 333 1 

Wie kann Das mache ich am schnellsten?

Antwort

2
aggregate(df$b, by=list(df$a), FUN=sum) 
-1

können Sie verwenden dplyr:

df %>% group_by(a) %>% summarise(.,b = sum(b)) 
2

Generell ist die schnellste Methode, mit großen Daten werden data.table zu verwenden.

install.packages("data.table", type = "source", 
repos = "http://Rdatatable.github.io/data.table") 
library("data.table") 

df <- data.frame(a=c(111,111,111,222,222,222,333,333,333), 
      b=c(1,0,1,1,1,1,0,0,1)) 
df <- as.data.table(df) 
df[, sum(b), by = a] 
+1

Ihre letzte Codezeile führt nicht zum Ausgang des beschriebenen OPs. Das kommt ziemlich nahe: 'df [, sum (b), by = a]' – bdemarest

-2

Wenn wir Paket dplyr verwenden, brauchen wir wirklich den Code wie so (wie von der anderen PhilC erwähnt).

df%>% group_by (a)%>% summarize (, b = Summe (b))?

Würde dies nicht tun?

df%>% group_by (a)%>% zusammenfassen (b = Summe (b))?

Verwandte Themen