我正在使用R中带有代码簿的数据集,它基本上告诉我我的因子变量的不同级别的标签应该是什么。例如,使用代码簿,我可以看到在我的“性别”变量中,0是“女性”而1是“男性”。我正在使用此信息相应地标记变量中的值。
然而,令我沮丧的是,我最近发现码本不完整。例如,它告诉我一个变量1表示“是”,2表示“否”,但不告诉我7s,8s和9是什么,我可以在数据中看到。我想做的是将此变量标记为如下(或类似的东西):
data$variable <- factor(data$variable,
levels=c(1, 2, 7, 8, 9),
labels=c("Yes", "No", "7", "8", "9"))
基本上,我希望将代码簿中未指定的所有级别标记为自己。我遇到的问题是这个码本缺少其中的一些,我真的不必手动查看我的数据中的所有未定义值来构造上述代码以用于变量。另外,如果我只是遗漏那些缺失的等级,R会自动将它们标记为“NA”,这是我不想要的。
总结:我试图弄清楚如何使用factor(),而不是将所有未指定的级别标记为“NA”,而是将它们标记为自己。
答案 0 :(得分:5)
您可以在创建因子后转换级别,以便我们可以利用它。
mydat <- c(1, 2, 3,2,3,4,3,2,1,2,4,4,6,5,7,8,9)
# convert to factor ignoring code book
dat <- factor(mydat)
# Create map corresponding to codebook levels
mymap <- c("1" = "Yes", "2" = "No")
# Figure out which levels are accounted for by codebook
id <- levels(dat) %in% names(mymap)
# Convert to appropriate values
levels(dat)[id] <- mymap[levels(dat)[id]]
另外(也可能更容易)
# alternatively we can construct the map if we have two vectors
# of the value and the codebook value
val <- c(1, 2)
lev <- c("Yes", "No")
dat <- factor(mydat)
levels(dat)[val] <- lev