2017-02-02 1 views
1

이 같은 data.table를 사용 Subset by group with data.table에 대한 후속 질문 :부분적인 집계에 비해 data.table

library(data.table) 

bdt <- as.data.table(baseball) 

# Aggregating and loosing information on other columns 
dt1 <- bdt[ , .(max_g = max(g)), by = id] 
# Aggregating and keeping information on other columns 
dt2 <- bdt[bdt[, .I[g == max(g)], by = id]$V1] 

dt1dt2 행의 수에 차이가 음주? dt2는 다른 열의 해당 정보를 잃어 버리지 않고 동일한 결과를 얻지 못하도록되어 있습니까? @Frank는 지적

+1

봐, 예를 들어,'BDT [ID == "woodge01을"] [위해 (-g)]'- 그 id에는'g '를 최대화하는 여러 행이 있습니다. 두 번째 방법은 모든 행을 식별하는 반면 첫 번째 방법은 최대 값을 반환합니다. 이것은 max (값)와 argmax (최대화 자 세트)의 차이입니다. http://math.stackexchange.com/q/312012/ – Frank

+1

답장을 보내 주셔서 감사합니다. 이것은 완벽하게 차이를 명확히합니다! – andrasz

+1

멋진 답변을 원할 경우 직접 게시 할 수 있습니다. – Frank

답변

3

는 :

bdt[bdt[ , .I[g == max(g)], by = id]$V1]이 최대가있는 모든 행을 식별하는 동안

bdt[ , .(max_g = max(g)), by = id]는 최대 값을 제공합니다.

는 수학적 설명을 What is the difference between arg max and max? 참조 R이 슬림 버전을 시도해보십시오에서

library(data.table) 
bdt <- as.data.table(baseball) 

dt <- bdt[id == "woodge01"][order(-g)] 
dt[ , .(max = max(g)), by = id] 
dt[ dt[ , .I[g == max(g)], by = id]$V1 ]