【发布时间】: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 <- c(1, 2, 3, 4)
我需要确保数据框中的每一列都有级别L。对于v2,这意味着有 0 个级别为 3 的观察值。我有不止两列,所以我需要在所有列中运行解决方案。
我尝试过的应用样式方法只是导致了 NA。
【问题讨论】:
-
好像只是
myData[] <- lapply(myData, `levels<-`, L)? -
谢谢,@DavidArenburg。我不知道
levels<-。这很有帮助。然而,虽然这确实增加了缺失的级别,但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 < 2 < 3 < 4(所以添加回未使用的级别而不更改值)。 -
嗯...这有点奇怪。以前从未遇到过这种行为......这似乎可以正常工作
myData[] <- lapply(myData, factor, levels = L)虽然它击败了我levels<-发生的事情。 -
这是否解决了您的问题?
-
是的,这似乎有效。谢谢。错过了你之前的消息。出于某种原因,我在...之后没有看到建议
标签: r