使用ddply和汇总时的结果不同。由于R和plyr版本不同?

时间:2013-04-26 14:54:03

标签: r plyr

我希望总结与数据集包中的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数据中没有NA,但真实数据集中有。

我得到以下输出R版本3.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

这似乎没有出现错误。在我的数据中,我只有三个剂量&#39;但很多补充类型&#39;。如果半类中没有值,则将全部总和设为一个或两个。

我是否有办法在不同的版本类型中生成一致的输出?

感谢您的帮助。

1 个答案:

答案 0 :(得分:7)

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是引发问题和后续补丁的链接。