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是对子集中所有内容的简单总和,因此对于具有x y z的子集,给出 的结果。7tag=="A"

所以我想要的最终结果是:

"A" 7
"B" 14
...

我可以列出所有值tag并循环它们以获取单个子集,然后将其提供给函数。有没有更好的办法?我猜一定有一些图书馆可以很好地做到这一点..

编辑:我已更改问题以提供更好的描述。希望这次我说清楚了。

我认为我遇到的困难是聚合函数需要整个子集来产生一个值,而普通聚合函数(平均值、长度等)从子集中获取一个变量。

4

2 回答 2

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
于 2013-03-04T16:53:53.227 回答
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
于 2013-03-05T02:56:53.740 回答