4

我正在使用 R 中带有代码簿的数据集,它基本上告诉我因子变量的不同级别的标签应该是什么。例如,使用密码本,我可以看到在我的“性别”变量中,0 是“女性”,1 是“男性”。我正在使用这些信息来相应地标记变量中的值。

然而,令我沮丧的是,我最近发现密码本并不完整。例如,对于一个变量,它告诉我 1 是“是”,2 是“否”,但没有告诉我 7、8 和 9 是什么,我可以在数据中看到。我想做的是按如下方式标记这个变量(或类似的东西):

data$variable <- factor(data$variable,
                        levels=c(1, 2, 7, 8, 9),
                        labels=c("Yes", "No", "7", "8", "9"))

基本上,我希望所有未在密码本中指定的级别都被标记为它们自己。我遇到的问题是这个密码本缺少很多这些,我真的不想手动查看我的数据中的所有未定义值来构造上述代码的永远变量。另外,如果我只是省略了那些缺失的级别,R 会自动将它们标记为“NA”,这是我不想要的。

摘要:我试图弄清楚如何使用因子(),而不是将所有未指定的级别标记为“NA”,而是将它们标记为它们自己。

4

1 回答 1

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
于 2012-10-14T18:48:50.757 回答