背景:私は数年にわたって国勢調査の公用マイクロデータサンプル(特にアメリカンコミュニティサーベイ)を使用して、さまざまな学位(高校の卒業証書、学士号、修士号など)を修了した人々の行動を調べています。その公用ファイルを持つ変数は「Schooling」と呼ばれます。問題は、変数「Schooling」に含まれるコードが年ごとに変更されていることです。たとえば、2007年までのファイルの場合、値「13」は学士号を取得したことを反映しますが、2008年以降、誰かが学士号を取得すると値は「21」に変更されます。
目標:ファイルの年を考慮して、完了した学位レベルを反映するように「Schooling」コードを変換する新しい「DegreeCompeted」変数を作成すること。ロジスティクス:すべての年のファイルは連結されており、レビューの目的で、この時点に到達する前にファイルを修正するのではなく、そのまま使用する必要があります。
既存のコード:これが私が試したものです。
if (original.file$year %in% c(2000,2001)) {
if (original.file$Schooling <= 08) {original.file$degree.completed <- 0}
else if (original.file$Schooling <= 10) {original.file$degree.completed <- 1}
else if (original.file$Schooling <= 12) {original.file$degree.completed <- 2}
else if (original.file$Schooling == 13) {original.file$degree.completed <- 3}
else if (original.file$Schooling == 14) {original.file$degree.completed <- 4}
else if (original.file$Schooling == 15) {original.file$degree.completed <- 5}
else if (original.file$Schooling == 16) {original.file$degree.completed <- 6}
}
else if (original.file$year %in% c(2002,2003,2004,2005,2006,2007)) {
if (original.file$Schooling <= 08) {original.file$degree.completed <- 0}
else if (original.file$Schooling <= 11) {original.file$degree.completed <- 1}
else if (original.file$Schooling == 12) {original.file$degree.completed <- 2}
else if (original.file$Schooling == 13) {original.file$degree.completed <- 3}
else if (original.file$Schooling == 14) {original.file$degree.completed <- 4}
else if (original.file$Schooling == 15) {original.file$degree.completed <- 5}
else if (original.file$Schooling == 16) {original.file$degree.completed <- 6}
}
else if (original.file$year %in% c(2008,2009,2010,2011)) {
if (original.file$Schooling <= 15) {original.file$degree.completed <- 0}
else if (original.file$Schooling <= 19) {original.file$degree.completed <- 1}
else if (original.file$Schooling == 20) {original.file$degree.completed <- 2}
else if (original.file$Schooling == 21) {original.file$degree.completed <- 3}
else if (original.file$Schooling == 22) {original.file$degree.completed <- 4}
else if (original.file$Schooling == 23) {original.file$degree.completed <- 5}
else if (original.file$Schooling == 24) {original.file$degree.completed <- 6}
}
問題:このタイプの次の警告メッセージが表示されます。
警告メッセージ:
1:In if(original.file $ year%in%c(2000、2001)){:条件の長さが1より大きいため、最初の要素のみが使用されます
2:In if(original.file $ Schooling <= 8){:条件の長さが1より大きいため、最初の要素のみが使用されます
3:In if(original.file $ Schooling <= 10){:条件の長さは> 1で、最初の要素のみが使用されます
質問:StackOverflowの他の質問から見てきたように、ここに「if」に関するベクトルとスカラーの問題があることは知っていますが、答えはこの状況には当てはまらないようです。ここでの解決策は何ですか?