背景:我在幾年中使用了一些人口普查公開使用的微數據樣本(特別是美國社區調查)來檢查完成不同學位(例如高中文憑,學士學位,碩士學位)的人的行爲。具有該公共使用文件的變量稱爲「學校教育」。問題在於變量「學校教育」中包含的代碼每年都在變化。例如,對於截至2007年的文件,「13」值反映完成學士學位,但從2008年開始,當有人完成學士學位時,值變爲「21」。如何比較數據框中的矢量值與R中的常量?
目標:創建一個新的「學位Competed」變量,將「學校」代碼翻譯爲反映已完成的學位等級,同時考慮文件的年份。 物流:所有年份的文件都被連接在一起,爲了審查目的,我必須按照原樣處理文件,而不是在文件到達這一點之前對其進行更正。
現有代碼:這是我試過的。
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:在如果(original.file $今年%C(2000年,2001年)%){:條件具有長度> 1且僅第一個元素將被用來
2:如果(original.file $學制< = 8){:條件具有長度> 1且僅第一個元素將被用來
3:在如果(original.file $學制< = 10 ){:條件長度> 1,只有第一個元素將被使用
問題:我知道在這裏有一個向量與標量問題,如果我看到StackOverflow上的其他問題,但答案似乎不適用於這種情況。這裏有什麼解決方案?
'if'作用於單個布爾值你可以使用'ifelse'作用於向量,但不適合這種情況,你也可以使用你的布爾條件和子集,像'dat $ degree [dat $ year%in%2000:2001&dat $ schooling <= 8] < - 0'。 – Justin