【问题标题】:How to return the values of a factor that have a 0 level as the raw numbers如何将具有 0 级别的因子的值作为原始数字返回
【发布时间】:2021-07-13 23:37:03
【问题描述】:

我正在使用模型来创建预测。该模型给了我一个从 0 到 6 的因子。

我正在尝试将此值报告为该值,但是当我尝试将其转换为数字或将其放入数据框中时,它会将 0 值转换为 1 并将所有其他值向上转换...有时.

out = as.factor(c(0,1,2,3,4,5))

[1] 0 1 2 3 4 5
等级:0 1 2 3 4 5

as.numeric(out)
[1] 1 2 3 4 5 6

如果每次都将值增加 1,我会简单地减去 1,但如果我的模型只返回非零值,它不会增加值:

out = as.factor(c(1,2,3,4,5,6))
as.numeric(out)
[1] 1 2 3 4 5 6

有没有一种简单的方法可以从因子中获取原始值,而不是 R 将 0 转换为 1 并调整其余值?

谢谢,

RStudio 1.3.1093 r 4.0.3

【问题讨论】:

  • as.numeric(as.character(out))。如果没有 as.char 部分,它会返回整数索引的数量;请参阅 as.numeric(factor(c('a','1')))as.numeric(as.character(factor(c('a','1'))))(应该发出警告)。
  • 您应该从中注意到 “获取原始值...并调整其余值” 是一个冒险的命题:如果一切都是从 0 开始的并且一切都顺序正确,并且没有任何间隙,那么这可能是安全的......但是,如果不满足任何这些条件,那么您将默默地破坏您的数据。
  • 感谢 cmets。我在这里找到了解决方案:stackoverflow.com/questions/3418128/…

标签: r type-conversion factors


【解决方案1】:

从我自己的 cmets 中,我在这里找到了解决方案:How to convert a factor to integer\numeric without loss of information?

"特别是,as.numeric 应用于一个因子是没有意义的,并且可能通过隐式强制发生。要将因子 f 转换为近似其原始数值,建议使用 as.numeric(levels(f))[f]并且比 as.numeric(as.character(f)) 稍微高效一些。” - Joshua Ulrich

这解决了问题,我可以毫无问题地放入数据框中。

【讨论】:

    猜你喜欢
    • 2017-11-10
    • 2014-07-06
    • 2021-01-08
    • 1970-01-01
    • 1970-01-01
    • 2013-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多