在我的数据框中,我有Likert-Scale项目编码为0-4。将这些文件从原始文件导入R后,它们被存储为字符。 然后我创建了一个带有布尔值的列表,指示每个变量是否是一个字符,然后使用lapply将其更改为factor。
i <- sapply(df, is.character)
df[i] <- lapply(df[i], as.factor)
当查看一些现在的因子变量(所有因素最初编码为0-4)时,我得到:
df$reactance1
[1] 3 3 4 3 2 4 1 4 3 3 1 1 4 3 4 3 4 4
Levels: 1 2 3 4 3 4
或
df$EAI4
[1] 0 0 2 1 2 0 3 4 1 3 0 0 0 0 0 0 1 0
Levels: 0 1 2 3 4 0 1 2
我试图用droplevels()
解决问题df$reactance1 <- droplevels(df$reactance1)
我的猜测是R,出于某种原因,认为角色3与另一个角色3不同,尽管它们应该被视为相同。这导致太多级别。我检查了我的原始数据,看看是否有一些数字前面可能有空格,但它看起来不像。
提前感谢您的帮助!
答案 0 :(得分:1)
这可能是“字符”列中leading/lagging
个空格的情况。如果列的trimws
为base R
,我们可以使用class
(character
函数)删除这些空格,并将其转换为factor
或else
离开专栏。
df[] <- lapply(df, function(x) if(is.character(x)){
factor(trimws(x))
} else x
)