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

时间:2016-04-06 12:41:46

标签: r

在我的数据框中,我有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不同,尽管它们应该被视为相同。这导致太多级别。我检查了我的原始数据,看看是否有一些数字前面可能有空格,但它看起来不像。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

这可能是“字符”列中leading/lagging个空格的情况。如果列的trimwsbase R,我们可以使用classcharacter函数)删除这些空格,并将其转换为factorelse离开专栏。

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