我是" 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做任何事情 - 我显然遗漏了一些东西。任何帮助将不胜感激。
答案 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的更多信息。