在我的数据框df中,我有Likert-Scale项目编码为0-4 . 将这些文件从原始文件导入R后,它们被存储为字符 . 然后我创建了一个带有boolean的列表,指示每个变量是否是一个字符,然后使用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不同,尽管它们应该被视为相同 . 这导致太多级别 . 我检查了我的原始数据,看看是否有一些数字前面可能有空格,但它看起来不像 .
在此先感谢您的帮助!
1 回答
这可能是'character'列中
leading/lagging
空格的情况 . 如果列的class
为character
,我们可以使用trimws
(base R
函数)删除这些空格,并将它们转换为factor
或else
,使列保持原样 .