在R中从因子转换为数值变量时遇到问题[关闭]


11

我想将因子变量转换为数字变量,但as.numeric没有达到我期望的效果。

下面,我将基于原始变量获取该变量的数字版本的摘要统计信息。均值以1递增。...(他推测)因子的水平同时具有名称和数字,并且我希望新变量的值来自于何时as.numeric使用该数字的名称?

> describe.by(as.numeric(df$sch), df$sch)

group: 
  var    n mean sd median trimmed mad min max range skew kurtosis se
1   1 5389    1  0      1       1   0   1   1     0  NaN      NaN  0
--------------------------------------------------------- 
group: 001
  var  n mean sd median trimmed mad min max range skew kurtosis se
1   1 19    2  0      2       2   0   2   2     0  NaN      NaN  0
--------------------------------------------------------- 
group: 002
  var  n mean sd median trimmed mad min max range skew kurtosis se
1   1 54    3  0      3       3   0   3   3     0  NaN      NaN  0
--------------------------------------------------------- 

1
我删除了您添加的新标签;在我看来,它们似乎太笼统而不具有歧视性,或者在as.factor太窄的情况下(因为它是R base中的函数)。如果您认为丢失了任何东西,请重新标记。
JMS

Answers:


28

正确:as.numeric(factor)返回R分配给该因子水平的数字。你可以试试as.numeric(as.character(factor))


4
如该答案所建议,建议使用stackoverflow.com/a/3418192/476907 as.numeric(levels(f))[f],效率要比as.numeric(as.character(f))
discipulus

谢谢!这个答案对我帮助很大:)
Yasha

13

这是R常见问题解答中的FAQ 7.10。是的,一个因子存储为从1到级别数的整数,而as.numeric给出底层代码。常见问题解答提供了两种转换为数字的方法。

但是,通常这是因为在读取数据时,您的数据中有些东西使R将其视为因子而不是数字(通常是杂散的非数字字符)。通常最好修复原始数据(转换会将非数字部分转换为NA),或者如果使用read.table或类似方法,则使用colClasses参数。


1
values.tmp < - sapply(possibleValues,as.numeric); values.nonnumeric < - values.tmp [is.na(values.tmp)]
russellpierce
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.