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

Buc*_*yOH 1 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
Run Code Online (Sandbox Code Playgroud)

这是按剂量和补充类型分开的长度之和.我的同事使用以下代码使用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))
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

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

有没有一种方法可以实现这一点,从而在版本类型中产生一致的输出?

谢谢你的帮助.

jor*_*ran 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
Run Code Online (Sandbox Code Playgroud)

(我原本错误地称这是一个改变ddply.)至于为什么,我想因为它似乎很方便,人们要求改变.以下是引发问题和后续补丁的链接.