首页 > 解决方案 > r expss 重新编码因子

问题描述

我想使用以下示例对因子变量进行小的重新编码:https ://cran.r-project.org/web/packages/expss/vignettes/tables-with-labels.html

a<-c(1,2,1,3,5,4,1,3,2,2,1,1)
a<-factor(a,levels = c(1,2,3,4,5), labels = c("aa", "bb", "cc", "dd", "ee" ))

假设我想创建新变量 b,其中“aa”、“bb”、“cc”现在是“xx”,其余部分将被复制。似乎我无法引用以下数字:

b<-expss::recode(a,1:3~99)

因为这没有回报。所以我尝试按标签引用:

b<-expss::recode(a, c("aa", "bb", "cc")~"xx", TRUE~copy, with_labels=FALSE)

但在这种情况下,新变量仍然存储旧级别:

$levels
[1] "aa" "bb" "cc" "dd" "ee" "xx"

$class
[1] "factor"

那么仅使用“xx”、“dd”、“ee”级别获取新变量的正确方法应该是什么?

标签: rexpss

解决方案


我们可以包装droplevels掉那些未使用的关卡

b <- droplevels(expss::recode(a, c("aa", "bb", "cc")~"xx",
        TRUE~copy, with_labels=FALSE))
levels(b)
#[1] "dd" "ee" "xx"

推荐阅读