私は R に移行しようとしている Stata ユーザーですが、どうしてもやめられない Stata の松葉杖が 1 つあります。これは、R の「適用」関数で同等のことを行う方法がわからないためです。
Stata では、スタブ名のローカル マクロ リストを生成し、そのリストをループして、それらのスタブ名から名前が作成された変数を呼び出すことがよくあります。
簡単な例として、次のデータセットがあるとします。
study_id year varX06 varX07 varX08 varY06 varY07 varY08
1 6 50 40 30 20.5 19.8 17.4
1 7 50 40 30 20.5 19.8 17.4
1 8 50 40 30 20.5 19.8 17.4
2 6 60 55 44 25.1 25.2 25.3
2 7 60 55 44 25.1 25.2 25.3
2 8 60 55 44 25.1 25.2 25.3
and so on...
2 つの新しい変数を生成したいと思います。これらの変数は、年が 6 の場合はそれぞれ、年が 7 の場合はそれぞれ、年が 8 の場合はvarX
とvarY
の値をとりvarX06
ます。varY06
varX07
varY07
varX08
varY08
最終的なデータセットは次のようになります。
study_id year varX06 varX07 varX08 varY06 varY07 varY08 varX varY
1 6 50 40 30 20.5 19.8 17.4 50 20.5
1 7 50 40 30 20.5 19.8 17.4 40 19.8
1 8 50 40 30 20.5 19.8 17.4 30 17.4
2 6 60 55 44 25.1 25.2 25.3 60 25.1
2 7 60 55 44 25.1 25.2 25.3 55 25.2
2 8 60 55 44 25.1 25.2 25.3 44 25.3
and so on...
melt
明確にするために、コマンドでこれを実行できることを知っていreshape
ます-基本的にこのデータをワイドフォーマットからロングフォーマットに変換しますが、それに頼りたくありません。それは私の質問の意図ではありません。
私の質問は、R でスタブ名のローカル マクロ リストをループする方法についてです。この単純な例を使用して、より一般的なジレンマを説明しています。
Stata では、スタブ名のローカル マクロ リストを生成できます。
local stub varX varY
そして、マクロ リストをループします。varX
年が 6 の場合、新しい変数orを生成し、varY
新しい変数値を(それぞれ) varX06
orの値に置き換えることができます。varY06
foreach i of local stub {
display "`i'"
gen `i'=.
replace `i'=`i'06 if year==6
replace `i'=`i'07 if year==7
replace `i'=`i'08 if year==8
}
最後のセクションは、R で複製するのが最も難しいと思われるセクションです'x'06
。私が . さらに、 を記述する'i'
と、Stata は文字列 "'i'" ではなく文字列 "varX" を返します。
Rでこれらのことを行うにはどうすればよいですか?
Muenchen の「R for Stata Users」を検索し、ウェブをグーグルで検索し、ここ StackOverflow で以前の投稿を検索しましたが、R ソリューションを見つけることができませんでした。
この質問が初歩的な場合は申し訳ありません。以前に回答されている場合は、その回答に誘導してください。
前もってありがとう、
タラ