2015-03-31 54 views
3

使用R版本3.1.3我試圖對事件日誌數據中的事件進行計數。如何使用data.table按日期(月,年,日)和子組彙總結果

我有一個timstamped事件的數據集。我清理了數據,並將其加載到data.table中以便於操作。

Colnames的訂購日期,EVENTDATE,訂單ID,EventTypeID,LocationID和EncounterID,

這些事件聚合爲:EncounterID的有多個單編號,每個單編號有多個EVENTID數據

例子是:

library(data.table) 
DT <- fread("OrderDate,EventDate,OrderID,EventTypeID,LocationID,EncounterID 
1/12/2012 5:40,01/12/2012 05:40,100001,12344,1,5998887 
1/12/2012 5:40,01/12/2012 05:49,100001,12345,1,5998887 
1/12/2012 5:40,01/12/2012 06:40,100001,12345,1,5998887 
1/12/2012 5:45,01/12/2012 05:45,100002,12344,1,5998887 
1/12/2012 5:45,01/12/2012 05:49,100002,12345,1,5998887 
1/12/2012 5:45,01/12/2012 06:40,100002,12345,1,5998887 
1/12/2012 5:46,01/12/2012 05:46,100003,12344,2,5948887 
1/12/2012 5:46,01/12/2012 05:49,100003,12345,2,5948887 
1/12/2013 7:40,01/12/2013 07:40,123001,12345,2,6008887 
1/12/2013 7:40,01/12/2013 07:41,123001,12346,2,6008887 
1/12/2013 7:40,01/12/2013 07:50,123001,12345,2,6008887 
1/12/2013 7:40,01/12/2013 07:55,123001,12345,2,6008887") 


DT$OrderDate <- as.POSIXct(DT$OrderDate, format="%d/%m/%Y %H:%M") 
DT$EventDate <- as.POSIXct(DT$EventDate, format="%d/%m/%Y %H:%M") 

我的最終目標是使用ggplot2可視化地瀏覽這些數據,查看每個月的各種組合的數量......但是我在使用data.table的數據彙總時遇到了問題

我的具體問題(一個例子)我如何能產生以下的表: 月 - 年,LocationID,Count_of_Orders

如果我做到以下幾點:

DT[,.N,by=.(month(OrderDate),year(OrderDate))] 

我得到一個所有eventID的計數,但我需要每個locationID的OrderID的每月計數。

month year N 
1: 12 2012 8 
2: 12 2013 4 

但是 - 我要找的是 - 月 - 年的N個結果由LocationID:

Month-Year,LocationID,Count_of_orders 
01-12,1,2 
01-12,2,1 
01-13,1,0 
01-13,2,1 

注:請注意,對於任何位置,不具有單在一個月,他們應該被列爲零計數。因此,需要通過生成唯一位置ID列表來確定位置。

有人可以提供解決方案嗎?

感謝

+1

你能否提供一些可以直接粘貼到R中的數據? – rmccloskey 2015-03-31 15:53:18

+0

好的,添加了csv格式。感謝您查看這個 – tcs 2015-03-31 16:20:37

+0

我的原始數據很粗糙 - 只是爲了說明概念/目標......更新的數據應該是乾淨/可行的(並且可以通過csv加載)。 – tcs 2015-03-31 16:30:13

回答

2

我假設你的日期/時間是在POSIXct格式(因爲你叫month/year)。然後,

d[, month.year := format(OrderDate, '%m-%y')] 

setkey(d, month.year, LocationID, OrderID) 

unique(d)[CJ(unique(month.year), unique(LocationID)), .N, by = .EACHI] 
# month.year LocationID N 
#1:  01-12   1 2 
#2:  01-12   2 1 
#3:  01-13   1 0 
#4:  01-13   2 1 

我用事實unique默認情況下會被領取鑰匙的唯一條目,也會保留關鍵,所以我可以做下輕鬆加入。

+0

不錯的一個。在過去的半個小時裏,我一直在剎那間腦袋。 – 2015-03-31 16:40:28

+0

哇,令人印象深刻。謝謝! – tcs 2015-03-31 17:15:40