我可以帮助您进行翻译。下面是关于IT技术的内容,需要翻译一份大数据集,该数据集有数百万条记录,格式如下:
表格:访问
|----------------|--------------|------------|
| PERSON_ID | DATE | #Clicks |
|----------------|--------------|------------|
| 1 | 2017-05-04 | 4 |
| 1 | 2018-05-04 | 1 |
| 1 | 2016-02-04 | 5 |
| 1 | 2018-05-06 | 7 |
| 2 | 2018-05-04 | 8 |
| 2 | 2018-05-16 | 1 |
| 2 | 2018-01-04 | 1 |
| 2 | 2018-02-04 | 2 |
| ... | ... | ... |
|----------------|--------------|------------|
我希望能统计每天的点击量+后续30天。
数据: N=2,000,000 人数=15,000
遍历每个人需要约1秒钟,速度太慢。 有什么建议可以优化代码吗?
我已经尝试了使用apply/lapply,但效果不太理想。
代码示例: library(lubridate);
#Initial Data Set
visits <- data.frame(person_id=c(1,1,1,1,2,2,2,2),
date=c(ymd("2017-05-04"),ymd("2018-05-04"),ymd("2016-02-04"),ymd("2018-05-06"),ymd("2018-05-04"),ymd("2018-05-16"),ymd("2018-01-04"),ymd("2018-02-04")),
clicks=c(4,1,5,7,8,1,1,2),
clicks_30days=0)
unique_visitors <- unique(visits$person_id)
#For Each Person
for(person_id in unique_visitors)
{
#Subset person's records and order the, descending
person_visits <- visits[visits$person_id == person_id,]
person_visits <- person_visits[order(person_visits$date),]
#For each visit count the # of clicks of the visit + all visits within visit's date + 30 days
for(i in 1:nrow(person_visits))
{
search_interval <- interval( person_visits$date[i] , person_visits$date[i]+days(30))
#####This is the interesting codeline#####
calc_result <- sum(person_visits$clicks[person_visits$date %within% search_interval])**
##########################################
#save the clicks + 30 days
visits[rownames(person_visits)[i],"clicks_30days"] <- calc_result
}
}
希望有比这更快的东西,真的真的会被赞赏。
data.table
包,看看是否可以解决您的问题,由于数据集很小,这不应该花费太长时间。 - zonfl