我有一个因素,并希望将其作为数据框中的列。但我惊讶地发现它自动变成了一个角色,即使我指定了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
如何进行作业,以便获得实际因素,保持原始水平?
重要的是我不能使用之后转换因子的解决方案,因为在这个例子中,它将获得星期二星期四星期二的水平&#39;虽然我准备了一个具有所有适当级别的因子,并且按照所需的顺序(在这个例子中,它将是一周中的所有日子)。
答案 0 :(得分:5)
这是因为提取列的不同之处。 a['d']
仍然是data.frame
,其中包含&#39; d&#39;作为列,虽然a[, 'd']
或a[['d']]
或a$d
都提取了&#39; d&#39;列为vector
,class
为factor
。要查看差异,请查看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"