2013-04-26 59 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是提出的問題和後續補丁的鏈接。

相關問題