2017-10-04 102 views
0

自從使用大型數據庫以來,我再次提出了一個關於高效地進行無循環計算的問題。不平衡面板數據:根據第一年的觀察值計算指數

下面的不平衡面板數據集採用下面df1的形式。可以看出,有不同年份觀察到的個人(ID)。有時也與GAB年(見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

您可以使用firstdata.table只做第一年的計算(假設你的數據是有序的),即

library(data.table) 

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

注意:您與您的數據有差異(第8行),因此結果與您發佈的內容不完全相同

+0

數據已更正! – Enrico

相關問題