【发布时间】:2014-08-09 12:56:49
【问题描述】:
使用此数据集 (InsectSprays)。
> d <- InsectSprays
> str(d)
'data.frame': 72 obs. of 3 variables:
$ count: num 10 7 20 14 14 12 10 23 17 20 ...
$ spray: Factor w/ 6 levels "A","B","C","D",..: 1 1 1 1 1 1 1 1 1 1 ...
$ total: num 174 174 174 174 174 174 174 174 174 174 ...
对于每个单独的因素(即喷雾类型),如何将计数总数添加到每次观察中? IE。我们想要
> head(d)
count spray total
1 10 A 174
2 7 A 174
3 20 A 174
4 14 A 174
5 14 A 174
6 12 A 174
在一些讲座中,建议使用ddply:
> head(ddply(d, .(spray), summarize, sum=ave(count, FUN=sum)))
spray sum
1 A 174
2 A 174
3 A 174
4 A 174
5 A 174
6 A 174
与单独使用 ave 相比,此命令有什么特别的优势吗?
> d$total <- ave(d$count, d$spray, FUN=sum)
> head(d)
count spray total
1 10 A 174
2 7 A 174
3 20 A 174
4 14 A 174
5 14 A 174
6 12 A 174
我并不是说ddply 没有优点,但在这个特定的例子中,我觉得我没有看到使用它的意义。
ddply 应用程序在这里有什么特别的优势吗?
【问题讨论】:
-
你可以使用
ddply(d, .(spray), mutate, total=sum(count))得到类似的结果 -
我认为
plyr的大多数拥护者发现语法更清晰——尤其是它的灵活性,而在基础 R 中,您可能需要交替使用ave、tapply和aggregate。 但是在这一点上,dplyr基本上取代了plyr::ddply,它具有显着的速度优势和一致的语法。