分配给数据框时,因子变为字符
Factor becomes character when assigned to data frame
我有一个因子,想将其作为数据框中的一列。但是我很惊讶的发现它自动变成了一个字符,即使我指定了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
我如何做作业才能得到一个实际因素,同时保持原来的水平?
重要的是我不能使用事后转换因子的解决方案,因为在示例中,当我准备了一个具有所有适当级别的因子时,它会获得级别 'Monday Thursday Tuesday'序列(在这个例子中,它将是一周中的所有日子)。
是因为提取列的不同。 a['d']
仍然是一个 data.frame
以 'd' 作为列,而 a[, 'd']
或 a[['d']]
或 a$d
都提取 'd' 列作为 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"
我有一个因子,想将其作为数据框中的一列。但是我很惊讶的发现它自动变成了一个字符,即使我指定了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
我如何做作业才能得到一个实际因素,同时保持原来的水平?
重要的是我不能使用事后转换因子的解决方案,因为在示例中,当我准备了一个具有所有适当级别的因子时,它会获得级别 'Monday Thursday Tuesday'序列(在这个例子中,它将是一周中的所有日子)。
是因为提取列的不同。 a['d']
仍然是一个 data.frame
以 'd' 作为列,而 a[, 'd']
或 a[['d']]
或 a$d
都提取 'd' 列作为 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"