R:将系数转换为数值的问题

R:将系数转换为数值的问题,r,matrix,numeric,type-conversion,R,Matrix,Numeric,Type Conversion,我正在使用从本网站获得的数据集: 我想使用一个要求矩阵为数字矩阵的包,因此我使用data.matrix将数据帧转换为数字矩阵 这是我的第一个问题:有没有一种方法来判断哪个数字对应于哪个因素?这很容易,只要看看本网站提供的数据集的情况下的数据,但我们如何实现这一点,当我们有数百个因素 我的第二个问题涉及以下代码: as.numeric(levels(f))[f] 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

我正在使用从本网站获得的数据集:

我想使用一个要求矩阵为数字矩阵的包,因此我使用data.matrix将数据帧转换为数字矩阵

这是我的第一个问题:有没有一种方法来判断哪个数字对应于哪个因素?这很容易,只要看看本网站提供的数据集的情况下的数据,但我们如何实现这一点,当我们有数百个因素

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

as.numeric(levels(f))[f]
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
我在另一篇文章中看到,这是将因子转换为数值的最有效方法。但是,对数据集中的一列使用此命令会得到以下结果:

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(levels(f))[f]
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
列有三个级别的因素:
“学术”、“一般”和“职业”

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

数字应反映级别的顺序。如果你的等级是“学术”、“普通”、“职业”,那么第二个等级应该是1,2,3,你可以只做
as.character(ml$prog)