【问题标题】:add back unused levels in factor在因子中加回未使用的级别
【发布时间】:2015-12-30 18:34:53
【问题描述】:

我有一个包含多个有序因子向量的数据框,可以取值 1-4。 v2 没有任何值为 3 的实例。这是一个基本示例:

myData <- data.frame(v1=factor(c(1, 1, 2, 2, 3, 3, 4, 4),
                               levels=c(1, 2, 3, 4),
                               ordered=TRUE),
                     v2=factor(c(1, 1, 2, 2, 4, 4, 4, 4),
                               levels=c(1, 2, 3, 4),
                               ordered=TRUE))
myData
#   v1 v2
# 1  1  1
# 2  1  1
# 3  2  2
# 4  2  2
# 5  3  4
# 6  3  4
# 7  4  4
# 8  4  4

levels(myData$v2)
# [1] "1" "2" "3" "4"

我需要估算丢失的数据,因此我在所有列中删除了未使用的级别(例如,v2 中的级别 3):

myData <- droplevels(myData)
levels(myData$v2)
# [1] "1" "2" "4"

现在我想创建一些 Likert 图,但数据框中的所有列都需要具有相同数量的响应选项(即相同数量的级别)。

我已经在名为L 的对象中以编程方式定义了数据框中的最大级别。所以在这种情况下,结果是一个对象L

L &lt;- c(1, 2, 3, 4)

我需要确保数据框中的每一列都有级别L。对于v2,这意味着有 0 个级别为 3 的观察值。我有不止两列,所以我需要在所有列中运行解决方案。

我尝试过的应用样式方法只是导致了 NA。

【问题讨论】:

  • 好像只是myData[] &lt;- lapply(myData, `levels&lt;-`, L)
  • 谢谢,@DavidArenburg。我不知道levels&lt;-。这很有帮助。然而,虽然这确实增加了缺失的级别,但 1 1 2 2 4 4 4 4 中的 4 变成了 3 的 1 1 2 2 3 3 3 3。我需要值保持不变 1 1 2 2 4 4 4 4 但有级别 Levels: 1 &lt; 2 &lt; 3 &lt; 4 (所以添加回未使用的级别而不更改值)。
  • 嗯...这有点奇怪。以前从未遇到过这种行为......这似乎可以正常工作myData[] &lt;- lapply(myData, factor, levels = L) 虽然它击败了我levels&lt;- 发生的事情。
  • 这是否解决了您的问题?
  • 是的,这似乎有效。谢谢。错过了你之前的消息。出于某种原因,我在...之后没有看到建议

标签: r


【解决方案1】:

通过@DavidArenburg:

myData[] &lt;- lapply(myData, factor, levels = L)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-19
    • 1970-01-01
    • 2018-02-17
    • 2019-10-13
    • 2023-03-18
    • 2021-06-26
    • 1970-01-01
    • 2018-02-25
    相关资源
    最近更新 更多