【问题标题】:R: issue with converting factor to numericR:将因子转换为数字的问题
【发布时间】:2015-10-15 06:46:51
【问题描述】:

我正在使用从该网站获得的数据集:http://www.ats.ucla.edu/stat/r/dae/mlogit.htm

我想使用一个要求矩阵为数字的包,所以我使用 data.matrix 将数据框转换为数字矩阵。

这是我的第一个问题:有没有办法判断哪个数字对应哪个因素?用本网站给出的数据集看案例中的数据很容易,但是当我们有数百个因素时,我们如何做到这一点呢?

我的第二个问题涉及以下代码:

as.numeric(levels(f))[f]

我在另一篇文章中看到这是将因子转换为数值的最有效方法。然而,在数据集中的一列上使用这个命令会给我这个结果:

as.numeric(levels(ml$prog))[ml$prog]
  [1] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
 [64] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[127] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[190] NA NA NA NA NA NA NA NA NA NA NA
Warning message:
NAs introduced by coercion 

另一方面,如果我只使用以下代码:

as.numeric(ml$prog)
  [1] 3 1 3 3 3 1 3 3 3 3 3 2 3 3 3 1 1 3 2 3 1 3 3 3 2 2 1 1 2 2 1 3 2 2 3 3 3 2 1 2 1 2 2 3 2 3 3 1 3 2 2 3 1 2 2 1 2 1 3 1 3 2 2 3 3 3 1 2 2 1 2 2 2 1 3 1 3 1 1 2 3 2 2 1 3 2 1 1 1 3 3 1 3 2 3
 [96] 1 2 3 3 1 2 3 3 3 1 2 1 1 2 2 2 2 2 2 2 3 2 2 2 2 3 2 2 2 2 2 2 2 2 2 2 2 1 2 2 1 2 2 2 2 2 2 1 1 2 1 1 1 2 2 2 2 2 3 1 2 2 2 2 2 1 1 2 2 2 3 1 2 2 1 1 2 2 3 2 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2
[191] 2 2 2 2 2 2 3 2 2 2

它似乎返回了我预期的结果。

只是为了提供更多背景信息,ml$prog 列具有三个级别的因素:"academic", "general", and "vocation"

【问题讨论】:

  • 数字应该反映级别的顺序。如果您的级别是“学术”、“一般”、“职业”,那么这些应该是 1,2,3

标签: r matrix numeric type-conversion


【解决方案1】:

我认为您的混淆是由于编码向量不是数字而是字符的事实。如果您需要一个号码,那么您的as.numeric(ml$prog) 就是正确答案。如果你想访问编码向量然后as.character(levels(ml$prog))[ml$prog]

【讨论】:

  • 对于第二个,你可以做as.character(ml$prog)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-05
  • 2017-05-06
  • 1970-01-01
  • 2015-06-01
  • 1970-01-01
  • 2017-05-14
相关资源
最近更新 更多