2013-06-05 65 views
1

在R中使用data.table包必須有一個簡單而優雅的方法,但我很難搞清楚。矢量化的操作是可取的。R:對符合條件的行進行聚合和計數,按唯一值和變換表進行分組

library(data.table)  
d1 <- as.Date("01-13-2013", '%m-%d-%Y')  
d2 <- as.Date("12-31-2013", '%m-%d-%Y')  
data <- data.frame(Date=sample(seq(d1,d2,1),10), Customer_ID=sample(1:5,20,replace=T), Product=sample(letters[1:5]), Store=sample(c("S1","S2"))) 

創建

ID Date_Prod_A Times_Purchased_A Date_Prod_C Times_Purchased_C

1 47 01-01-2012     2   -     - 

2 26   -     - 01-17-2012     1 

查找產品的所有值的列表以及每個產品添加兩列。 另外,創建一個表格,顯示每個ID顯示多少個不同的產品。


表< -data.table(數據)

+0

對不起,產品_C從哪裏來?這可能是您的文本格式問題? –

+2

歡迎使用stackoverflow。 [可重複使用的例子](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)是要走的路。一些證明你的努力的證據通常被認爲是禮貌的。 – mnel

回答

3

我想你的意思多少次出現的產品,而不是有多少種不同的產品,每個ID。

這裏的解決方案使用data.tablereshape,但分兩步:首先我計算長格式的產品數量,然後將數據轉換爲寬格式。我認爲使用plyrddply這裏更好。

library(data.table) 
DT <- as.data.table(dat1) 
DT[,n := .N,by= ID] 
reshape(DT,direction='wide',idvar='ID',timevar='Product',drop='Store') 
    ID Purchase_date.Product_A n.Product_A Purchase_date.Product_C n.Product_C 
1: 47    01-01-2012   2      NA   NA 
2: 26      NA   NA    01-17-2012   1 
+0

是的,這似乎是我需要的,謝謝! – mel

+3

@DeanMacGregor你混淆了過時的重塑包(由reshape2更新)和我在這裏使用的重塑命令 – agstudy

+1

@agstudy我不知道'reshape2'包中有一個'reshape'命令。我總是用'熔化'和'鑄造' –

相關問題