首页 > 解决方案 > 我怎样才能使数据框中的一个因素永久地成为数字?

问题描述

首先让我说我对编程和 R 非常陌生,所以这可能是一个愚蠢的问题。但它就在这里。

我正在处理一个包含来自语料库的元数据的大型数据框。一栏包含文本的熟练程度(即“B1”、“B2”、“C1”、“C2”)。我已经能够将这些因子水平重命名为“1”、“2”、“3”和“4”,但我需要将它们设为数字,以便我可以将此列用作线性建模中的因变量。我尝试了一些建议的方法,但这些方法不起作用,我不知道为什么。

我尝试了以下代码,但是当我检查结构时,它仍然是一个具有四个级别的因子,并且不是数字:

> as.numeric(as.character(df$proficiency))
  [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2
 [42] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
 ...
[452] 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4

> str(proficiency)
 Factor w/ 4 levels "1","2","3","4": 1 1 1 1 1 1 1 1 1 1 ...

#I have also tried this, but it does not work either. 
> df$proficiency<-as.numeric(as.character(df$proficiency))

> str(proficiency)
 Factor w/ 4 levels "1","2","3","4": 1 1 1 1 1 1 1 1 1 1 ...

为什么会这样?我究竟做错了什么?

标签: rfunction

解决方案


这里的问题是您将数字分配给名为 proficiency 的数据框列,但随后str()您正在检查一个名为 proficiency 的变量。正如@joran 在评论中所说,如果您进行str(df$proficiency)此转换应该是正确的。同样的转换也可以通过

df$proficiency<-as.numeric(levels(df$proficiency))[df$proficiency]

对于大型数据帧,这稍微快一些


推荐阅读