2013-04-26 42 views
1

我正在总结类似于数据集包中的ToothGrowth数据的数据。使用ddply并进行汇总时的结果不同。由于不同的R和Plyr版本?

我想输出是这样的:

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,但是存在真正的数据集。

我得到以下输出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 

这似乎不会引起错误。在我的数据中,我只有三种“剂量”,但有很多“补充剂类型”。在半分类中没有任何价值的地方,它把整个数字放到一个或两个中。

有没有一种方法可以在不同版本类型之间产生一致的输出?

感谢您的帮助。可以这么说,

+2

'ddply'被更新为“默认突变”可以这么说。因此,在最后三个变量中,当您引用'len'时,实际上是指您刚创建的'len'变量,它只是一个值。把它叫做别的。 – joran 2013-04-26 15:01:09

+0

@joran我会说,不要犹豫,把这作为anwser。 – 2013-04-26 15:06:30

+0

@joran,关于为什么会发生这种变化的任何评论(或者一个链接,或许对你来说没有太大麻烦)? – Arun 2013-04-26 15:07:46

回答

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

相关问题