首页 文章

将字符存储为因子后的级别错误

提问于
浏览
1

在我的数据框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 回答

  • 1

    这可能是'character'列中 leading/lagging 空格的情况 . 如果列的 classcharacter ,我们可以使用 trimwsbase R 函数)删除这些空格,并将它们转换为 factorelse ,使列保持原样 .

    df[] <- lapply(df, function(x) if(is.character(x)){
                  factor(trimws(x))
                  } else x
            )
    

相关问题