2017-02-23 8 views
-1

수백만 개의 행과 수십 개의 열이있는 거대한 데이터 테이블이 있으므로 성능이 중요한 문제입니다. 이 데이터는 콘텐츠 사이트에 대한 방문을 설명합니다. 각 방문의 가장 초기 (즉, 최소 조회 시간) 히트의 ContentId를 계산하려고합니다. 내가 한 일은 : dt[,.(FirstContentOfVisit=ContentID[ContentID != ""][which.min(HitTime)]), by=VisitId,.SDcols=c("ContentID","HitTime")]다른 열의 조건을 기반으로 열을 필터링하는 방법 R

문제는 내가 알고 싶지 않은 모든 HitTime 벡터에서 which.min이 처음으로 계산되는지 (또는 필자가 모르는 경우) 아니면 필터링 된 HitTime 벡터 (비어 있지 않은 ContentID에 해당하는 벡터).

또한 내가 계산 한 후 처음과 다른 ContentID의 최소 HitTime (첫 번째가 아닌 콘텐츠 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))