2013-12-09 77 views
2

我有一個日期列(有多個記錄的日期)和一個數字列的框架。我想要一個框架,列出每個記錄的一個日期,每個日期的數字總和以及每個日期的記錄出現次數。基於獨特日期計算記錄

起始幀:

SomeDate SomeNum 
10/1/2013 2 
10/1/2013 3 
10/2/2013 5 
10/3/2013 4 
10/3/2013 1 
10/3/2013 1 

,我可以得到的每一個獨立日期SomeNum的總和與以下:

newDF<-unique(within(df, { 
    SumOfSomeNums <- ave(SomeNum, SomeDate, FUN = sum) 
})) 

但我無法弄清楚如何獲得數的計數每個獨特的SomeDate發生的時間。

我想:

SomeDate SumOfSomeNums CountOfSomeDate 
10/1/2013 5    2 
10/2/2013 5    1 
10/3/2013 6    3 

什麼會得到我的CountOfSomeDate數據? THX

回答

2

你的方法繼續使用length爲您的聚合函數:

unique(within(mydf, { 
    SumOfSomeNums <- ave(SomeNum, SomeDate, FUN = sum) 
    CountOfSomeDate <- ave(SomeDate, SomeDate, FUN = length) 
    rm(SomeNum) 
})) 
# SomeDate CountOfSomeDate SumOfSomeNums 
# 1 10/1/2013    2    5 
# 3 10/2/2013    1    5 
# 4 10/3/2013    3    6 

然而,還有許多其他的方式到達這裏。

下面是一個aggregate方法:

do.call(data.frame, aggregate(SomeNum ~ SomeDate, mydf, function(x) c(sum(x), length(x)))) 
# SomeDate SomeNum.1 SomeNum.2 
# 1 10/1/2013   5   2 
# 2 10/2/2013   5   1 
# 3 10/3/2013   6   3 

並有data.table方法:

library(data.table) 
DT <- data.table(mydf) 

DT[, list(Count = length(SomeNum), Sum = sum(SomeNum)), by = SomeDate] 
#  SomeDate Count Sum 
# 1: 10/1/2013  2 5 
# 2: 10/2/2013  1 5 
# 3: 10/3/2013  3 6 
+0

**謝謝你**那偉大工程!我會和其他選項一起玩。我將來會增加更多的專欄,所以也許這些選項會更好地滿足我的需求。 – BigKage

+1

@BigKage,沒問題。我認爲你會發現'data.table'語法很容易拾取,而且它在大型數據集上很棒。 – A5C1D2H2I1M1N2O1R2T1