1

必须有一种简单而优雅的方法在 R 中使用 data.table 包执行此操作,但我很难弄清楚。矢量化操作更可取。

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 显示了多少不同的产品。


table <- data.table(data)
4

1 回答 1

3

我认为您的意思是产品出现了多少次,而不是每个 ID 出现了多少不同的产品。

这是一个使用data.tableandreshape但分两步的解决方案:首先我以长格式计算产品的数量,然后将我的数据转换为宽格式。我认为使用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
于 2013-06-06T00:44:11.153 回答