鉴于以下数据:
cdate cid cprice
1 2013-05-24 **275059** 74.99
2 2013-04-15 **275059** 63.10
3 2013-03-12 **275059** 40.39
4 2013-09-03 276620 62.09
5 2013-03-27 276261 34.11
6 2012-12-20 276136 60.96
7 2013-01-25 276136 69.96
8 2012-11-23 276136 105.17
9 2012-11-09 276136 73.20
10 2013-01-09 276136 73.40
我想有效地计算(获得超过2百万行)他上次购买日期的每个客户(cid列)与当前白天的差异(以天为单位)。
类似的东西:
getrecense <- function(f){ return(as.integer(difftime(format(Sys.Date(),"%Y-%m-%d"), max(f$cdate)))); }
recence <- data.frame(as.table(by(clients, clients$cid, getrecence)));
完全符合我的要求,但根本无法扩展。
答案 0 :(得分:3)
DF <- read.table(text=" cdate cid cprice
1 2013-05-24 **275059** 74.99
2 2013-04-15 **275059** 63.10
3 2013-03-12 **275059** 40.39
4 2013-09-03 276620 62.09
5 2013-03-27 276261 34.11
6 2012-12-20 276136 60.96
7 2013-01-25 276136 69.96
8 2012-11-23 276136 105.17
9 2012-11-09 276136 73.20
10 2013-01-09 276136 73.40", header=TRUE)
library(data.table)
DT <- data.table(DF)
DT[, cdate:=as.Date(cdate)]
DT[, Sys.Date()-max(cdate), by=cid]
# cid V1
#1: **275059** 287 days
#2: 276620 185 days
#3: 276261 345 days
#4: 276136 406 days
DT[, as.integer(Sys.Date()-max(cdate)), by=cid]
# cid V1
#1: **275059** 287
#2: 276620 185
#3: 276261 345
#4: 276136 406
答案 1 :(得分:1)
相应的dplyr
替代方案:
library(dplyr)
DF$cdate <- as.Date(DF$cdate)
DF %.%
group_by(cid) %.%
summarise(
diff_num = as.integer(Sys.Date() - max(cdate)))
# cid diff_num
# 1 **275059** 287
# 2 276136 406
# 3 276261 345
# 4 276620 185