转:
接下来继续看我们的read.table函数。
首先介绍一个非常有用的函数na.strings。na.strings在read.table中默认na.strings=“NA”。
“na”的意思是“not
available”,即“不可用”,在数据分析中我们更愿意称呼它“missing
values”------缺失值。这么一说大家就明白了,它是处理缺失值的。我们在整理录入数据的时候,有一些数据因为各种原因无法调查,称为缺失值。缺失值有时候会用特别的数字表示而不一定空着不填。如在统计某人群男子身高(cm)时,有的人没有记录上,那么可能缺失值会用“999”表示,因为人们是不会长到999cm的。我们录入数据时,这样的数据用999表示,但是并不希望它被计算。此时就可以用na.strings定义它。
我举一个例子:
先读取文件wq,看看是什么样子:
> setwd("E:/Rstore/")
> WQ=read.table("wq.txt",header=T)
> WQ
ABCD
1 12 65 78 98
2 56 89 87 78
3 78 87 56 98
4 98 89 24 56
5 78 87 87 12
6 96 89 33 45
7 23 78 69 65
8 23 98 82 86
9 65 87 12 45
这个是原表。假设我们现在认为数字98是缺失值,那么我们就这么录入:
WQ1=read.table("wq.txt",header=T,na.strings=98)
> WQ1
ABCD
1 12 65 78 NA
2 56 89 87 78
3 78 87 56 NA
4 NA 89 24 56
5 78 87 87 12
6 96 89 33 45
7 23 78 69 65
8 23 NA 82 86
9 65 87 12 45
显然,在R中,定义以后的缺失值在读出时用NA表示。如果你想定义多个缺失值,如在这张表中定义98和78都是缺失值,只需用c()函数将它们结合即可:
WQ2=read.table("wq.txt",header=T,na.strings=c(98,78))
> WQ2
ABCD
1 12 65 NA NA
2 56 89 87 NA
3 NA 87 56 NA
4 NA 89 24 56
5 NA 87 87 12
6 96 89 33 45
7 23 NA 69 65
8 23 NA 82 86
9 65 87 12 45
如果你只想读取数据的前6行,那么就需要另外一个函数nrows,它表示你要读取数据的前n行:
> WQ3=read.table("wq.txt",header=T,nrows=6)
> WQ3
ABCD
1 12 65 78 98
2 56 89 87 78
3 78 87 56 98
4 98 89 24 56
5 78 87 87 12
6 96 89 33 45
这里需要说明的是,变量名不算在所选取范围内。这样是很方便的。它的默认值是nrows=-1,当然,只要你让nrows为负数,它和取默认值是一样的。
相比而言,另一个函数skip函数就不是那么方便了。skip,“跳读”,你可以理解它为“忽略”,默认值是0。
比如从第三行开始读取wq数据,那么需要让skip=2,即跳过(忽略)前两行开始读取数据:
> WQ4=read.table("wq.txt",header=T,skip=2)
> WQ4
X56 X89X87
X78
178875698
298892456
378878712
496893345
523786965
623988286
765871245
注意,不同于nrows,变量名也被“跳”过去了。因此实际应用时可能需要和col.names合用,代码如下:
>
WQ4=read.table("wq.txt",header=T,skip=2,col.names=c("A","B","C","D"))
> WQ4
A
BCD
1 78 87 56 98
2 98 89 24 56
3 78 87 87 12
4 96 89 33 45
5 23 78 69 65
6 23 98 82 86
7 65 87 12 45
这样,我们不仅得到了原表(WQ)中第3-9行的数据,而且也拥有了每一列的变量名。
check.names,检查变量名。它的默认值是TRUE,它是干什么的呢?即如果你的列变量名有重复,使用check.names=T(或者不写这一项),它会对重复的变量名重新编写变量名。为什么要检查变量名呢?因为通常情况下表中的每一列应该为一种变量,不太可能会有相同的变量名。用法实际上很简单,我们看看例子:
在这张名为wq的表中,第二列和第三列的变量名均为“B”,如果我们直接读取这张表,看看发生什么:
> WQ=read.table("wq.txt",header=T)
> WQ
ABB.1D
1 12 657898
2 56 898778
3 78 875698
4 98 892456
5 78 878712
6 96 893345
7 23 786965
8 23 988286
9 65 871245
在默认状态或者是check.names=T的情况下,R自动将第二个变量名“B”改成了“B.1”。如果我们使用check.names=F,那么这张表的变量名会原封不动的读出来:
> WQ=read.table("wq.txt",header=T,check.names=F)
> WQ
ABBD
1 12 65 78 98
2 56 89 87 78
3 78 87 56 98
4 98 89 24 56
5 78 87 87 12
6 96 89 33 45
7 23 78 69 65
8 23 98 82 86
9 65 87 12 45
最后再介绍两个函数:fill和blank.lines.skip。
请看这张表:
直接用read.table读这样的表,是出不出来的:
> WQ=read.table("wq.txt",header=T)
Error in scan(file, what, nmax, sep, dec, quote, skip, nlines,
na.strings,:
line 1 did not have 4 elements
R给出的错误提示是第一行没有4个元素。但是有的研究设计(如平衡不完全区组设计)可能会列出这样有空值类型的表格,或者说你的缺失值可能没有用其他数字或方法定义,就是没有填任何标记,那么就可以使用fill函数:
> WQ=read.table("wq.txt",header=T,fill=T)
> WQ
ABCD
1 12 65 78 NA
2 56 89 87 78
3 78 87 56 98
4 98 89 24 56
5 78 87 87 12
6 96 89 33 45
7 23 78 69 65
8 23 98 82 86
9 65 87 12 45
这样,表被读了出来,并且在缺失的地方自动补充了“NA”。
fill的默认值并不是FALSE,而是“fill=!blank.lines.skip”。
“!”是逻辑值“非”。“fill”顾名思义,你可以理解为“填满”,”blank lines
skip”则是跳过空白行。那么这个代码的意思就是fill默认不跳过空白行。所以当表中有空白存在,又没有定义fill=T,就不会被读出来。
如果你的数据是这样的:
当你把它读取的时候,原表空白行并不会被读出来:
> WQ=read.table("wq.txt",header=T)
> WQ
ABCD
1 12 65 78 98
2 56 89 87 78
3 78 87 56 98
4 98 89 24 56
5 78 87 87 12
6 96 89 33 45
7 23 78 69 65
8 23 98 82 86
9 65 87 12 45
原表的空白行没有任何一个元素,所以并没有被读出来,因为默认值blank.lines.skip=T,即跳过空白行。此时就要用blank.lines.skip=F,即不跳过空白行:
> WQ=read.table("wq.txt",header=T,blank.lines.skip=F)
> WQ
ABCD
112 65 78 98
256 89 87 78
378 87 56 98
498 89 24 56
578 87 87 12
696 89 33 45
7NA NA NA NA
823 78 69 65
923 98 82 86
这样,读出了空白行并且用“NA”填补。
如果觉得《r语言read_html函数 R语言之read.table函数(2)》对你有帮助,请点赞、收藏,并留下你的观点哦!