ここ数年は Stata でプログラミングしており、最近約 4 か月前に R に切り替えました。
次の形式のデータがあります。
popname sex year age COUNTRY
329447 AUS f 1921 23 AUS
329448 AUS f 1921 24 AUS
329449 AUS f 1921 25 AUS
329450 AUS f 1921 26 AUS
329451 AUS f 1921 27 AUS
329452 AUS f 1921 28 AUS
...
329532 AUS f 1922 23 AUS
329533 AUS f 1922 24 AUS
329534 AUS f 1922 25 AUS
... ... . .. .. ...
297729 BLR f 1987 59 BLR
297730 BLR f 1987 60 BLR
297731 BLR f 1987 61 BLR
...
291941 BLR m 1973 71 BLR
291942 BLR m 1973 72 BLR
291993 BLR m 1974 23 BLR
次のように、既存のデータセットに Max.Age ({popname, sex,year で定義された特定のサブグループの最大 Age を計算する) という新しい集計変数を作成したいと思います。
popname sex year age COUNTRY max.age
329447 AUS f 1921 23 AUS 72
329448 AUS f 1921 24 AUS 72
329449 AUS f 1921 25 AUS 72
329450 AUS f 1921 26 AUS 72
329451 AUS f 1921 27 AUS 72
329452 AUS f 1921 28 AUS 72
...
329532 AUS f 1922 23 AUS 75
329533 AUS f 1922 24 AUS 75
329534 AUS f 1922 25 AUS 75
... ... . .. .. ...
297729 BLR f 1987 59 BLR 87
297730 BLR f 1987 60 BLR 87
297731 BLR f 1987 61 BLR 87
...
291941 BLR m 1973 71 BLR 78
291942 BLR m 1973 72 BLR 78
291993 BLR m 1974 23 BLR 78
Stata でこれを行うには、次のようにegenコマンドとbyコマンドを使用します。
by State City Day, sort:
egen cnt=seq(), from(23) to(72) block(1);
doBy パッケージを使用して、R でこれを実行してみました。私が書いたコードは次のとおりです。
IDB <- orderBy(~popname+sex+year+age, data=IDB)
v<-lapplyBy(~sex+year, data=IDB, function(d) c(NA,max(d$age)))
IDB$Max.age <- unlist(v)
lapplyByは元のデータセット (IDB) よりも短い長さの集約されたデータセットを返すため、これは機能しません。
Rで「by | egen」タイプのStataコードを本質的に実装する方法について、誰かが親切に私を正しい方向に向けることができますか?
ありがとう