今天是我在R的第一天 - 你的建议会有很长的路要走。
我正在尝试根据预订活动创建用户的汇总视图。
在预订表中提取唯一的CustID。为客户创建新的DF。
customer <- with(BookingsDF,data.frame(CustID=sort(unique(CustID))))
向客户表中的每个CustID添加交易次数。
customer <- cbind(customer, NumberOrders = with(BookingsDF,
as.numeric (by (id, CustID, function(x) length(unique(x))))))
这会生成错误消息
data.frame(...,check.names = FALSE)中的错误:参数暗示 行数不同:373545,391910
这没有意义 - 2个查询如何输出不同的长度?考虑第一个查询提取唯一的CustID,第二个查询提取每个唯一的CustID已预订的次数。
谢谢。
决定:感谢您的帮助。我已将代码更新为:
customer <- booked.dt[,{
FirstPurchaseDate = .SD[which.min(CreatedDate)]
LastPurchaseDate = .SD[which.max(CreatedDate)]
NumberOrders = .N
TotalAmount = sum(Price)
} , by = CustID]
不幸的是,这需要很长时间才能完成。所以我不得不通过SQL进行操作,然后将聚合数据上传到R.
答案 0 :(得分:1)
有很多软件包可以解决这个问题;我更喜欢data.table
。基本思想是分裂,计算和重新加入。声明data.table
,然后计算每个唯一客户ID的行数,并将其存储在customer
中。
在此示例中,请尝试此
library(data.table)
bookings.DT <- data.table(BookingsDF)
customer <- bookings.DT[,.N,by="CustID"]
您应该会在CustID
中看到N
和customer
的表格。这假设数据是长格式的。如果没有,请参阅reshape2