【发布时间】:2013-01-31 19:43:32
【问题描述】:
背景:我正在使用一些人口普查公共使用微数据样本(尤其是美国社区调查)来检查已完成不同学位(例如高中文凭、学士学位、硕士学位)的人的行为.该公共使用文件的变量称为“Schooling”。问题是变量“Schooling”中包含的代码每年都在变化。例如,对于截至 2007 年的文件,“13”值反映完成了学士学位,但从 2008 年开始,当某人完成学士学位时,该值变为“21”。
目标:创建一个新的“Degree Competed”变量,该变量转换“Schooling”代码以反映完成的学位级别,同时考虑到文件的年份。 后勤:所有年份的文件都已连接起来,出于审查目的,我必须按原样处理文件,而不是在它到达这一点之前对其进行更正。
现有代码:这是我尝试过的。
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: 在 if (original.file$year %in% c(2000, 2001)) { : 条件长度 > 1 并且只使用第一个元素
2: 在 if (original.file$Schooling 1 并且只使用第一个元素
3: 在 if (original.file$Schooling 1 并且只使用第一个元素
问题:我知道这里的“if”存在向量与标量问题,正如我从 StackOverflow 上的其他问题中看到的那样,但答案似乎不适用于这种情况。这里的解决方案是什么?
【问题讨论】:
-
if作用于单个布尔值。相反,您可以使用ifelse,它作用于向量,但不太适合这种情况。您还可以使用布尔条件和子集。类似于dat$degree[dat$year %in% 2000:2001 & dat$schooling <= 8] <- 0。
标签: r if-statement constants dataframe scalar