将因子转换为R

时间:2015-09-03 08:33:17

标签: r

我是" R" (所以这看起来有点基本) 我从世界卫生组织提取了一些数据,但我正在努力转换一排数据,其中一些数据点被归类为因子,一些数据被归类为数字。

首先,我已经隔离了一行代表私人医疗费用的数据(2003年至2014年)

 > private_exp
   2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014
 32 41.3 41.3 38.6 37.8 36.9   33 33.4 33.6 30.4 28.2 28.2 25.3

当我查看数据的结构时,我注意到有些数据点被列为数字,而其他数据被列为因子(我发现它们很奇怪)。

> str(private_exp)
'data.frame':   1 obs. of  12 variables:
 $ 2003: Factor w/ 23 levels "","0","0.2","14.1",..: 15
 $ 2004: Factor w/ 20 levels "","0.2","107",..: 15
 $ 2005: Factor w/ 21 levels "",">90","0.2",..: 15
 $ 2006: num 37.8
 $ 2007: Factor w/ 17 levels "","0.9","15",..: 9
 $ 2008: num 33
 $ 2009: num 33.4
 $ 2010: num 33.6
 $ 2011: Factor w/ 20 levels "","0.7","13.4",..: 12
 $ 2012: num 28.2
 $ 2013: num 28.2
 $ 2014: num 25.3

我真的不明白一个数据点,例如2003年可能是一个23级的因素,而实际上它只是一个数字。无论如何 - 我尝试将其更改为数字,并没有真正理解输出。

> as.numeric(private_exp$`2003`)
[1] 15

它似乎仍然是一个因素:

> private_exp$`2003`
[1] 41.3
23 Levels:  0 0.2 14.1 16.9 2 21.6 2617 2864 3.89 32.3 ... No data
> class(private_exp$`2003`)
[1] "factor"

这是我第一次尝试用R做任何事情 - 我显然遗漏了一些东西。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

看起来你被R的复制语义绊倒了。

当你这样做时:

as.numeric(private_exp$`2003`)

您正在使用2003列的副本并将副本转换为数字向量。

如果要更改原始data.frame,则必须将其分配回来:

private_exp$`2003` <- as.numeric(private_exp$`2003`)

请注意,因子向量上的as.numeric将提供级别,而不是文本值。要将文本值作为数字向量,您必须使用as.character然后转换为数字来提取它们:

private_exp$`2003` <- as.numeric(as.character(private_exp$`2003`))

您可以找到有关factors in the documentation的更多信息。