我希望汇总与datasets包中的ToothGrowth数据类似的数据。
我想要的输出如下所示:
supp len half one two
1 OJ 619.9 132.3 227.0 260.6
2 VC 508.9 79.8 167.7 261.4
这是按剂量和补充剂类型划分的长度总和。我的同事使用R版本2.15.1和使用以下代码的plyr_1.7.1获得此输出。
library(datasets)
x <- ToothGrowth
test <- ddply(x,c("supp"),summarize,
len = sum(len,na.rm=TRUE),
half = sum(len[dose==0.5],na.rm=TRUE),
one = sum(len[dose==1],na.rm=TRUE),
two = sum(len[dose==2],na.rm=TRUE))
ToothGrowth数据中没有NAs,但实际数据集中有NAs。
我得到了以下输出R version3.0.0和plyr_1.8。如果有用的话,我可以为两者提供完整的sessionInfo()。
supp len half one two
1 OJ 619.9 619.9 0 0
2 VC 508.9 508.9 0 0
这似乎不会带来错误。在我的数据中,我只有三个“剂量”,但有很多“补充剂类型”。如果在半类别中没有值,它会将整个和放入一个或两个中。
有没有一种方法可以让我在不同的版本类型中产生一致的输出?
谢谢你的帮助。
发布于 2013-04-26 15:10:06
可以这么说,summarise
被更新为“默认情况下发生变异”。因此,在最后三个变量中,当您引用len
时,实际上是指您刚刚创建的len
变量,它只是一个值。称它为其他东西:
test <- ddply(x,c("supp"),summarize,
+ len1 = sum(len,na.rm=TRUE),
+ half = sum(len[dose==0.5],na.rm=TRUE),
+ one = sum(len[dose==1],na.rm=TRUE),
+ two = sum(len[dose==2],na.rm=TRUE))
> test
supp len1 half one two
1 OJ 619.9 132.3 227.0 260.6
2 VC 508.9 79.8 167.7 261.4
(我最初错误地将此称为ddply
的变化。)至于为什么,我猜是因为它看起来很方便,人们要求改变。Here是指向提出的问题和后续修补程序的链接。
https://stackoverflow.com/questions/16239394
复制相似问题