R定义没有观察的水平

R define levels without observations

是否可以为向量中不存在的值定义因子水平?

我正在尝试将不包含调查中所有可能值的整数向量 (x) 转换为具有匹配标签的因子。我希望值 3 被标记为 "Agree",但由于它是遇到的第一个值 r,因此它被分配到我的可能级别列表中的第一个级别。

> x <- c(3L,3L,3L,3L,3L)
> x <- as.factor(x)
> levels(x) <- c("Strongly disagree","Disagree", "Agree", "Strongly agree")
> summary(x)

结果:非常不同意:5,而我希望它会导致:同意:5

能做到吗?

您需要指定 levels 以及 labels :

x <- c(3L,3L,3L,3L,3L)
labs <- c("Strongly disagree","Disagree", "Agree", "Strongly agree")
factor(x, levels = seq_along(labs), labels = labs)
#We are actually doing here 
#factor(x, levels = 1:4, labels = labs)

#[1] Agree Agree Agree Agree Agree
#Levels: Strongly disagree Disagree Agree Strongly agree

可以这样做,比如这样:

x <- c(3L,3L,3L,3L,3L)

factor_levels <- c("Strongly disagree","Disagree", "Agree", "Strongly agree")
x <- factor(factor_levels[x], levels = factor_levels)
summary(x)