r - factor() 中的未指定水平

标签 r na r-factor

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

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

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

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

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

最佳答案

您可以在创建因子后转换级别,以便我们可以利用它来发挥我们的优势。

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

关于r - factor() 中的未指定水平,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12885289/

相关文章:

html - 如何使用 Google 电子表格作为后端创建 HTML 数据输入表单

r - 如何使用 "NA"作为字符串

r - 如何按组选择具有最小值并在R中包含NA的行

如果列中的 NA 数大于 3,则删除数据框的行

r - 将数据分配给剪切产生的级别 (R)

r - 子集数据框以仅包含在另一个因子的两个级别中都具有值的一个因子的级别

r - 如何在 R 中使用 plot_grid() 函数绘制多个 seqplots(TraMineR 包)?

r - 有没有办法使用R来打破图表轴并打破线性回归线?

R - 仅显示数据帧子集中使用的级别

list - R:向数据框列表中的列添加不同的值