2013-03-04 46 views
0

我有一個數據集象下面這樣:如何在子集上聚合並返回一個值?

id tag x y z 
1 "A" 1 2 3 
2 "B" 0 2 4 
3 "A" 0 0 1 
4 "B" 1 3 4 

我有一個函數agg,這需要通過tag分組子集,也就是說,參數爲:

id tag x y z 
1 "A" 1 2 3 
3 "A" 0 0 1 

假設agg是一個簡單的總和所有xyz中的子集,所以給出的結果爲7,子集與tag=="A"

所以我想是什麼樣的最終結果:

"A" 7 
"B" 14 
... 

我可以列出和循環他們的tag所有值來獲得,則單個子集飼料它的功能。有沒有更好的辦法?我猜測必須有一些圖書館做這個很好..

編輯:我改變了問題給予更好的描述。希望這次我明確表示。

我覺得我的困難是聚合函數需要整個子集產生一個值,而正常的聚合函數(平均數,長度等)需要一個變量從子集。

+2

您能給重複的例子? – juba 2013-03-04 15:05:41

+0

您提到的「聚合」數據有多種方式,但是您在尋找什麼樣的聚合?總和?一個平均值?條目的數量? – 2013-03-04 15:07:17

回答

1

我想你想用reshape2重塑。 。 。

library(reshape2) 
df <- read.table(
    header=TRUE, text=' 
id tag x y z 
1 "A" 1 2 3 
2 "B" 0 2 4 
3 "A" 0 0 1 
4 "B" 1 3 4 
') 
df[,1]<- NULL 
df2<- melt(df, id="tag") 
dcast(df2, tag~., sum) 

# tag NA 
#1 A 7 
#2 B 14 
1
ds <- read.table(text='id tag x y z 
1 "A" 1 2 3 
2 "B" 0 2 4 
3 "A" 0 0 1 
4 "B" 1 3 4', header=TRUE) 

lapply(split(ds[c('x','y','z')], ds$tag), sum) 
$A 
[1] 7 

$B 
[1] 14