2016-12-16 68 views
-1

條件求和專欄中,我有一個這樣的數據幀:與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 

我需要的列「B」的總和爲每個「一」:

A B 
1 111 2 
2 222 3 
3 333 1 

哪有我以最快的方式做到這一點?

回答

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

您可以使用dplyr:

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

一般來說,大數據的最快方法是使用data.table

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

您的最後一行代碼不會產生OP描述的輸出。這非常接近:'df [,sum(b),by = a]' – bdemarest

-2

如果我們使用包dplyr,我們真的需要像這樣的代碼(由其他PhilC提到)。

DF%>%GROUP_BY(一)%>%綜述(, b = sum(b))?

這不行嗎?

df%>%group_by(a)%>%summarize(b = sum(b))?