我目前有一个看起来像这样的数据框:
dat2<-data.frame(
ID=c(100,101,102,103),
DEGREE_1=c("BA","BA","BA","BA"),
DEGREE_2=c(NA,"BA",NA,NA),
DEGREE_3=c(NA,"MS",NA,NA),
YEAR_DEGREE_1=c(1980,1990,2000,2004),
YEAR_DEGREE_2=c(NA,1992,NA,NA),
YEAR_DEGREE_3=c(NA,1996,NA,NA)
)
ID DEGREE_1 DEGREE_2 DEGREE_3 YEAR_DEGREE_1 YEAR_DEGREE_2 YEAR_DEGREE_3
100 BA <NA> <NA> 1980 NA NA
101 BA BA MS 1990 1992 1996
102 BA <NA> <NA> 2000 NA NA
103 BA <NA> <NA> 2004 NA NA
我想基于获得的学位程度来创建编码为0/1的伪变量,以一个BA学位的完成为基础。
完成的数据帧将具有第二个BA度虚拟度,一个MS度虚拟度,依此类推。例如,对于ID 101,两个虚拟变量的值都将为1。完成两个MS度的操作将不需要虚拟,即,如果某人完成了两个MS度的操作,则MS度的虚拟度将为1,并且没有虚拟度。表示完成两个MS学位。
这是一个更大的数据帧的简单快照,该数据帧除了BA和MS之外还具有许多不同的度类型,因此对于每个单度类型创建if / else语句对我来说都不理想。
任何建议将不胜感激。
答案 0 :(得分:1)
您还可以包括新列,并根据DEGREE列分配值。
包括新列,所有值均等于0:
dat2 <- cbind(dat2, BA_2nd = 0)
dat2 <- cbind(dat2, MS = 0)
根据您的条件将值更改为1:
dat2[!is.na(dat2$DEGREE_2), 8] <- 1
dat2[!is.na(dat2$DEGREE_3) & dat2$DEGREE_3 == "MS", 9] <- 1
dat2
您可以使其适应所有条件。该代码仅生成您包含的输出表。