分配给数据框时,因子成为字符

rum*_*cho 2 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
Run Code Online (Sandbox Code Playgroud)

我如何进行作业,以便得到一个实际因素,保持原始水平?

重要的是我不能使用之后转换因子的解决方案,因为在这个例子中,它会得到"星期二星期四星期二"的水平,而我已经准备了一个具有所有适当级别的因子,并且按照所需的顺序(在这个例子中) ,这将是一周中的所有日子.

akr*_*run 5

这是因为提取列的不同.在a['d']仍然是一个data.frame与"d"作为柱,同时a[, 'd']a[['d']]a$d所有提取"d"列作为vectorclass作为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" 
Run Code Online (Sandbox Code Playgroud)