2017-10-04 11 views
0

대용량 데이터베이스를 사용한 작업 이후 루프가없는 일부 계산을 효율적으로 수행하는 것과 관련하여 다시 한 번 질문합니다.불균형 패널 데이터 : 첫 번째 관찰 연도를 기준으로 한 인덱스 계산

기본 불균형 패널 데이터 세트는 아래의 df1 형식을 취합니다. 보시다시피, 서로 다른 해에 관찰 된 개인 (ID)이 있습니다. 때때로 또한 놀았 년 (ID 4 참조)

library(data.table) 
df1 = data.table(Year = c(2000, 2001,2002, 2003, 2000, 2001, 2000, 
2001,2002, 2003, 2004, 2001,2003,2004), 
        ID = c(1,1,1,1,2,2,3,3,3,3,3,4,4,4), 
        V1 = c(10, 9, 8,11, 2,3, 16,12,15,16,20, 8,7,9), 
        V2 = c(2,3,2,4,0.5,1, 4,6,5,8,9, 8,10,11) 
       ) 

내가 각 ID의 V1에 대한/V2가 관찰 첫 해에 대해 계산 된 변수 V3를 만들고 싶습니다. 다음 수년 동안이 값은 유지되거나 복사됩니다. DF2에서 원하는 출력 아래 참조 :

df2 = data.table(Year = c(2000, 2001,2002, 2003, 2000, 2001, 2000, 
           2001,2002, 2003, 2004,2001,2003,2004), 
        ID = c(1,1,1,1,2,2,3,3,3,3,3,4,4,4), 
        V1 = c(10, 9, 8,11, 2,3, 12,16,15,16,20, 8,7,9), 
        V2 = c(2,3,2,4, 0.5,1, 4,6,5,8,9 ,8,10,11), 
        V3 = c(5,5,5,5,4,4,3,3,3,3,3, 1,1,1 ) 
        ) 

답변

1

당신은 단지에 data.table에서 first를 사용할 수있는 첫 해의 계산을 (데이터가 주문한 가정), 즉

library(data.table) 

df1[, v3 := first(V1)/first(V2), by = ID][] 

참고 : 데이터와 일부 불일치가 생겼으므로 (결과 행 8) 결과가 게시 한 것과 동일하지 않습니다.

+0

데이터가 수정되었습니다! – Enrico