2017-10-04 4 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

あなたは(あなたのデータが順序付けられていると仮定して)最初の年の計算を行うだけにdata.tableからfirstを使用することができ、すなわち

library(data.table) 

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

注:データ(行8)にいくつかの相違があるため、結果は投稿したものと一致しません

+0

データが修正されました! – Enrico

関連する問題