2013-03-04 51 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