2013-02-24 78 views
26

我要總結的是具有相同值的行中的一列:總和行的基於列的值

> df <- data.frame("1"=c("a","b","a","c","c"), "2"=c(1,5,3,6,2), "3"=c(3,3,4,5,2)) 
> df 
    X1 X2 X3 
1 a 1 3 
2 b 5 3 
3 a 3 4 
4 c 6 5 
5 c 2 2 

對於一列(X2),可以將數據彙總得到所有行的總和具有相同的X1值:

> ddply(df, .(X1), summarise, X2=sum(X2)) 
    X1 X2 
1 a 4 
2 b 5 
3 c 8 

我如何做同樣的X3等欄目,除了X1任意號碼?

這是我想要的結果:

X1 X2 X3 
1 a 4 7 
2 b 5 3 
3 c 8 7 

回答

25
ddply(df, "X1", numcolwise(sum)) 

看到?numcolwise的細節和例子。

6

aggregate爲這類事情很大功能:

aggregate(df[,-1],df["X1"],sum) 

    X1 X2 X3 
1 a 4 7 
2 b 5 3 
3 c 8 7 

而且從plyr的numcolwise方法的基礎R版本:

aggregate(df[,sapply(df,is.numeric)],df["X1"],sum) 
20

aggregate可以很容易地與式接口要這樣做:

aggregate(. ~ X1, data=df, FUN=sum) 
## X1 X2 X3 
## 1 a 4 7 
## 2 b 5 3 
## 3 c 8 7 

Equivalentl Y:

aggregate(cbind(X2, X3) ~ X1, data=df, FUN=sum) 
5

存儲器效率的data.table溶液和編碼優雅

library(data.table) 
DT <- data.table(df) 


DT[, lapply(.SD, sum), by = X1] 

.SD是data.table用於通過X1的值所定義的每個組的子集。有與data.table包相關的3個有用的小插曲。