【发布时间】:2015-09-23 06:32:18
【问题描述】:
我有一个包含 51993 行和 18 列的大 csv 文件。这是表格的一部分:
head(ddd)
country.of.birth age sex X2000 X2001 X2002 X2003 X2004 X2005 X2006 X2007
Afghanistan 0 men 0 0 1 2 2 0 1 1
Afghanistan 0 women 1 1 0 0 1 0 0 0
Afghanistan 1 men 0 2 5 2 3 4 1 1
Afghanistan 1 women 4 1 4 2 3 2 3 2
Afghanistan 2 men 5 0 8 7 7 3 5 3
Afghanistan 2 women 4 8 3 9 4 4 4 3
在主 csv 文件中,列是:出生国家、年龄、性别,然后是 2000 年到 2014 年的年份。我的问题是为什么 R 将 X 放在每年的数字之前?
当我使用 str() 函数时,我得到:
> str(ddd)
'data.frame': 15264 obs. of 18 variables:
$ country.of.birth: Factor w/ 261 levels "0","1","10","103",..: 51 51 51 51 51 51 51 51 51 51 ...
$ age : Factor w/ 38 levels "","0 ","1 ","10 ",..: 2 2 3 3 14 14 17 17 20 20 ...
$ sex : Factor w/ 39 levels "","0 ","1 ","10 ",..: 38 39 38 39 38 39 38 39 38 39 ...
$ X2000 : Factor w/ 786 levels "","0","1","10",..: 2 3 2 478 555 478 92 4 205 716 ...
$ X2001 : int 0 1 2 1 0 8 11 8 26 19 ...
$ X2002 : int 1 0 5 4 8 3 13 18 22 15 ...
$ X2003 : int 2 0 2 2 7 9 15 13 23 33 ...
$ X2004 : int 2 1 3 3 7 4 11 15 21 22 ...
$ X2005 : int 0 0 4 2 3 4 10 6 13 16 ...
$ X2006 : int 1 0 1 3 5 4 8 13 20 10 ...
$ X2007 : int 1 0 1 2 3 3 6 7 9 17 ...
$ X2008 : int 0 0 2 0 4 5 4 6 8 9 ...
$ X2009 : int 0 1 1 4 7 3 9 10 11 12 ...
$ X2010 : int 1 1 6 4 8 10 17 10 21 16 ...
$ X2011 : int 0 5 9 6 21 18 16 27 34 24 ...
$ X2012 : int 3 5 5 16 30 22 44 48 46 49 ...
$ X2013 : int 3 0 12 19 24 34 54 46 76 71 ...
$ X2014 : int 2 3 15 3 21 29 37 48 64 62 ...
如您所见,性别是一个因素,但有 39 个级别,而它只有两个值(男性)和(女性)。此外,2000 年(表中的 X2000)是一个具有 786 个级别的因子,它应该被读作“int”。为什么 R 读取具有这么多级别的可观察“性别”,为什么它将 2000 年读取为一个因素,而将其他读取为 int(情况如此)?
编辑: 年龄列具有以下形式的值:20-24、25-30、...直到 85-90。另一个类别为 90+
【问题讨论】:
-
显然,“sex”可以是空白(“”)、0、1、10... 而对于“X2000”,您也可以有空白(“”),即一个字符与整数。
-
如果需要,请使用
read.csv(..., stringsAsFactors=F)来避免因子变量。另外我认为在 R 中你不能有一个带有数字名称的列,所以 R 把 X 转换成字符 -
@AndriyTkachenko 你可以。列可以任意命名,甚至是
2 + 2。请参阅下面的答案。