该haven
包提供了一个非常有用的函数,用于使用 write_dta() 函数将数据框/Tibble 导出到 Stata。
当 R 因子写入 Stata 时(使用 write_dta() 函数),内部 R 因子级别变为以 Stata 长格式保存的数值,级别被写入变量标签。(这些内部 R 因子水平与应用于as.numeric(factor)
因子相同。)
我想明确设置 R 的内部因子级别,以便在 Stata 中获得所需的 numlabels 值。
为了显示:
eyes <- c("blue", "brown","green", "blue", "not disclose")
eyes_factor <- as.factor(eyes)
levels(eyes_factor)
#[1] blue brown green blue not disclose
#Levels: blue brown green not disclose
as.numeric(as.factor(eyes))
#[1] 1 2 3 1 4 # which is to be expected
但是,我想根据高度具体的模式设置 R 的内部因子水平。例如,我想要内部级别:
蓝色 = 2 棕色 = 1 绿色 = 6 不公开 = -1
因为这与问卷上的编码相匹配。
我尝试使用forcats
包中的 lvls_recode。该函数如下所示:
forcats::lvls_reorder
function (f, idx, ordered = NA)
{
f <- check_factor(f)
if (!is.numeric(idx)) {
stop("`idx` must be numeric", call. = FALSE)
}
if (!setequal(idx, lvls_seq(f)) || length(idx) != nlevels(f)) {
stop("`idx` must contain one integer for each level of `f`",
call. = FALSE)
}
refactor(f, levels(f)[idx], ordered = ordered)
}
但正如您在此处看到的,我需要指定的新 idx 不能,因为只采用序列号。
看了stats::relevel()
也没有解决问题。