2017-02-23 11 views
-1

数百万行と数十の列を持つ巨大なデータテーブルがありますので、パフォーマンスが私にとって重要な問題です。データは、コンテンツサイトへの訪問を記述します。私は、各訪問の最も早い(すなわち、最小ヒットタイム)ヒットのContentIdを計算したいと思います。私がしたことは: dt[,.(FirstContentOfVisit=ContentID[ContentID != ""][which.min(HitTime)]), by=VisitId,.SDcols=c("ContentID","HitTime")]R内の別の列の条件に基づいて列をフィルタリングする方法

問題は私が最初にwhich.minがすべてのHitTimeベクトル(私が望んでいない!)でminを計算するかどうか、またはフィルタされたHitTime vector(非空のContentIDに対応するもの)。

さらに、私はそれを計算した後、最初のコンテンツIDとは異なるContentIDの最小ヒットタイム(つまり、最初のコンテンツIDの最も早いヒットタイム)を取得する方法を教えてください。

私は非常に強力なマシン(バーチャルマシン)を持っていましたが、ユーザー定義関数(最初にサブデータテーブルをソートしてから目的の値を抽出する) )に180GBのRAMを搭載しています。ですから、私はインラインソリューションを探しています。

答えて

0

dplyrこれをさらに簡単にします。あなたはデータのサンプルを共有しませんでしたが、興味のある変数がこのように見えると思います。

web <- tibble(
    HitTime = sample(seq(as.Date('2010/01/01'), as.Date('2017/02/23'), by="day"), 1000), 
    ContentID = 1:1000, 
    SessionID = sample(1:100, 1000, replace = TRUE) 
) 

次に、あなただけの各SessionIDについてHitTimeの最も初期の値を見つけるために、group_bysummariseを使用することができます。

web %>% 
    group_by(SessionID) %>% 
    summarise(HitTime = min(HitTime)) 
関連する問題