【发布时间】:2017-02-23 11:09:57
【问题描述】:
我有一个包含数百万行和数十列的庞大数据表,因此性能对我来说是一个至关重要的问题。该数据描述了对内容站点的访问。我想计算每次访问的最早(即最小命中时间)命中的 ContentId。我所做的是:
dt[,.(FirstContentOfVisit=ContentID[ContentID != ""][which.min(HitTime)]), by=VisitId,.SDcols=c("ContentID","HitTime")]
问题是我不知道是 which.min 首先计算所有 HitTime 向量上的最小值(我不想要!)还是只在过滤的 HitTime 向量上计算(对应于非空 ContentID)。
此外,在我计算之后 - 如何获得与第一个不同的 ContentID 的最小 HitTime(即非第一个内容 id 的最早命中时间)。
当我尝试使用用户定义的函数(首先 - 对子数据表进行排序,然后提取所需的值)进行这两种操作时,它花了很长时间(实际上从未停止过),尽管我有一台非常强大的机器(虚拟机)配备 180 GB 内存。所以我正在寻找内联解决方案。
【问题讨论】: