2012-12-13 16 views
0

我有一個可怕的時間運行'ddply'在兩個變量看起來應該是一個簡單的命令。ddply緩慢,當用日期聚合因子變量

的樣本數據(DF):

Brand Day  Rev  RVP    
    A  1  2535.00 195.00 
    B  1  1785.45 43.55 
    C  1  1730.87 32.66 
    A  2  920.00 230.00 
    B  2  248.22 48.99 
    C  3  16466.00 189.00  
    A  1  2535.00 195.00 
    B  3  1785.45 43.55 
    C  3  1730.87 32.66 
    A  4  920.00 230.00 
    B  5  248.22 48.99 
    C  4  16466.00 189.00 

我使用命令:

df2<-ddply(df, .(Brand, Day), summarize, Rev=mean(Rev), RVP=sum(RVP)) 

我的數據幀有大約2600觀察,並有45個級別的 「品牌」 和最多300 「日」級別(使用'difftime'編碼)。

當我簡單地按「日」分組時,我可以很容易地使用'ddply',但是當我嘗試按「品牌」分組時,我的電腦凍結了。

想法?

+1

ddply只是很慢,尤其是當有很多小團體。改爲使用'by'來嘗試data.table。 – frankc

+0

有沒有任何教程可以讓我指點? – roody

+3

我們最終將指引您參閱Google的相同教程。 – joran

回答

3

您應該通過幫助頁面aggregatebyavetapply,密切關注該類型的論據他們中的每一個期望和參數的名稱以及閱讀。然後運行所有示例或demo()。 @hadley對pkg:plyr和reshape/reshape2做的主要事情是強加一定程度的規則性,但這是以犧牲速度爲代價的。我明白他爲什麼要這樣做,特別是當我嘗試使用base::reshape函數時,而且當我反覆執行時忘記了,哪些需要一個列表,這需要使用FUN =參數標籤,這需要interaction()作爲分組變量,....因爲它們都有些不同。

> aggregate(df[3:4], df[1:2], function(d) mean(d)) 
    Brand Day  Rev RVP 
1  A 1 2535.000 195.00 
2  B 1 1785.450 43.55 
3  C 1 1730.870 32.66 
4  A 2 920.000 230.00 
5  B 2 248.220 48.99 
6  B 3 1785.450 43.55 
7  C 3 9098.435 110.83 
8  A 4 920.000 230.00 
9  C 4 16466.000 189.00 
10  B 5 248.220 48.99