如何解决R分类变量为数字有序值
我有一个很大的数据集,其中3个变量按照9个类别(例如“极差”至“极好”)进行编码。我需要将这些数字进行适当的分析。建议我使用as.numeric()
,但是,这会随机将1-9分配给比例尺,而不是反映原始的比例尺顺序。例如,“公平”应该放在数字5的中间,但已被随机分配为2。
解决方法
您可以使用包含所有代码及其值的重新编码列表。然后,您可以将列应用于此列表以获取值:
recode_as = list("bad"=-1,"neutral"=0,"good"=1)
data = data.frame(6:10,"A"=c("good","good","neutral","bad","bad"),"B"=c("bad","neutral"),"C"=c("good","bad"))
data$A = unlist(recode_as[as.character(data$A)])
data$B = unlist(recode_as[as.character(data$B)])
data$C = unlist(recode_as[as.character(data$C)])
转换前的数据:
X6.10 A B C
1 6 good bad good
2 7 good good good
3 8 neutral bad good
4 9 bad good good
5 10 bad neutral bad
转换后的数据:
X6.10 A B C
1 6 1 -1 1
2 7 1 1 1
3 8 0 -1 1
4 9 -1 1 1
5 10 -1 0 -1
,
以下是说明问题的示例,并提供了一种解决方案。
假设您的数据框中有一列是一个因素(item1
):
df <- data.frame(
item1 = c("extremely bad","very good","very bad"),stringsAsFactors = TRUE
)
如果仅在列as.numeric
上使用item1
,则将具有:
as.numeric(df$item1)
[1] 2 3 1 5 1 4
这对应于您看似随机(但实际上是字母顺序)的因子水平:
levels(df$item1)
[1] "bad" "extremely bad" "good" "very bad" "very good"
相反,您应该明确指定级别的顺序:
as.numeric(factor(df$item1,levels = c("extremely bad","very bad","extremely good")))
[1] 1 5 3 6 3 2
在这种情况下,“极差”按级别顺序排在第一位,因此被编码为1。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。