r - 当分配给数据框时,因子变成字符

标签 r factors

我有一个因素,希望将其设为数据框中的一列。但我惊讶地发现它会自动转换为字符,即使我指定了 stringsAsFactors。

这是 MWE:

a <- data.frame(dummy=1:5, stringsAsFactors = TRUE)
b <- as.factor(c("Monday", "Tuesday", "Monday", "Thursday", "Tuesday"))
a["d"] <- b

> levels(a["d"])
NULL

如何完成作业才能获得实际因素,同时保持原始水平?

重要的是,我不能使用事后转换因子的解决方案,因为在示例中,当我准备了一个具有所有适当级别且按所需顺序的因子时,它将获得“星期一星期四星期二”级别(在此示例中,它将是一周中的所有天)。

最佳答案

这是因为提取列的差异。 a['d'] 仍然是一个以 'd' 作为列的 data.frame,而 a[, 'd']a[['d']]a$d 均将 'd' 列提取为具有 class向量 code> 作为因素。要查看差异,我们检查 str()

str(a['d'])
#'data.frame':   5 obs. of  1 variable:
#$ d: Factor w/ 3 levels "Monday","Thursday",..: 1 3 1 2 3

str(a[['d']])
#Factor w/ 3 levels "Monday","Thursday",..: 1 3 1 2 3

levels(a["d"])
#NULL

levels(a[["d"]])
#[1] "Monday"   "Thursday" "Tuesday" 

关于r - 当分配给数据框时,因子变成字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41333131/

相关文章:

r - 使用 R (rvest) 进行导航和抓取

r - 在表达式中包含变量、逗号和希腊符号

一次 reshape 多个值

c++ - 找到两个数字的公约数最多为 10^6 的最有效方法

r - 关于 GForce 在 data.table 1.9.2

R - 具有超前和滞后的逻辑语句

r - 将相同的因子水平应用于R中具有不同水平数量的多个变量

algorithm - 直接按升序枚举数字的因子而不进行排序?

c++ - 分解数字时输出中的额外 "0"

arrays - 访问数组的元素和因子