R语言数据导入之read.table
来源:DataCamp Blog,香格里拉(o)/ blog 编译:思亮 qq:55531469
你可能会觉得将数据导入R会让人非常沮丧。每个不同类型的文件导入R似乎都需要不同的函数,然后就迷失在众多的函数参数中。长话短说,通过本文这些都可以相当轻松,随时把不同的函数灵活使用,不论你是初学者还是更有经验的用户。
为了满足这些需求,本文列举了几个较为简单的数据快速导入的方法,从最简单的文本文档到spss和sas的文档。请继续阅读后面的内容。
你的数据
导入数据前,需要获取数据,如何获取数据不在本文的探讨范围内。
要点: 当你要导入数据前需要确认如下几点,这样能保证你正确导入数据到R中。
• 如果你用的是电子表格类(spreadsheet)的数据,第一行一般是表头,第一列往往是行号或者是样本数据的id
• 文件的分隔符要确认,常见有逗号(,),tab(),空格( )
• 字符编码,一般非Window默认字符编码要使用fileEncoding参数调整
• 字段,数值或者名字中的空格要尽量避免使用,换句话说,每个词会可能被解析成单独的变量
• 如果需要可使用.代替空格用于词之间的分隔
• 短的变量名字要好于长的名字
• 尽量不要在列名中使用下列符号,如,?, $,%, ^, &, *, (, ),-,#, ?,,,<,>, /, |, , [ ,] ,{, };
• 如果使用excel表,应删除多余的列或者是注释一类的内容
• 确保缺失数据标记为空
准备工作空间
可以参考使用Rsudio这类的编辑器,为了确保工作空间中没有已有的对象对当前的操作有影
响,需要清空内存对象。
rm(list=ls())#清除内存对象
读取txt文档
将下述内容复制到至e:/work下 // Contents of .txt
1
6
a
2
7
b
3
8
c
4
9
d
5
10
e
我们需要用到
setwd('e:/work')#设置工作空间
df <- read.table("", header = F,comment.char="/")
df
##  V1 V2 V3
## 1  1  6  a
## 2  2  7  b
## 3  3  8  c
## 4  4  9  d
## 5  5 10  e
read.table的英文帮助有点晦涩,现在讲各个参数详解
• file:文件名,使用一个字符串,可能需要全路径符号\不能出现,可以使用/ 或者\。也可以是一个文本连接(见connection函数),也可以是一个URL链接的文本文档。
• header: 逻辑值(FALSE或TRUE)文件第一行是否包含变量名(列名)。我们建议你明确地设定 header 参数。按照惯例,首行只有对应列的字段而没有行标签对应的字段。因此,它会比余下的行少一个字段。(如果需要在 R 里面看到这一行,设置 header = TRUE。)如果要读取的文件里面有行标签(row name)的头字段(可能是空的),以下面的方式读取
  read.table("", header = TRUE, row.names = 1)
• sep: 文件中字段(列)的分隔符,打开文件可以看到文使用的分隔符,默认选择sep=''(代表任意空白字符作为分隔符,如空格,制表符,换行符)
• quote: 默认情况下,字符串可以被"或'括起,并且两种情况下,引号内部的字符都作为字符串的一部分。有效的引用字符(可能没有)的设置由参数 quote 控制。对于sep = "",默认值改为 quote = ""。
– 引号中使用引号:如果没有设定分隔字符,在被引号括起的字符串里面,引号需要用C格式的逃逸方式逃逸,即在引号前面直接加反斜杠 。 如果设定了分隔符,在被引号括起的字符串里面,按照电子表格的习惯,把引号重复两次以达到逃逸的效果。 例如 'One string isn''t two',"one more" 可以被下面的命令读取 read.table("testfile", sep = ",") 这在默认分隔符的文件里面不起作用。
• dec:用来标志小数点的字符,有些国家用“,” 来区分小数点。
• row.names: 用数字或者字符表示表中行号的列,若为NULL则会自动编号。一般当表中包
含了表头时,如果第一行(表头行)的字段比数据的列数少一个时,指定首行为row.name比较有用。
• col.names:指定列名的字符向量。默认是V1,V2,V3,...
• as.is:read.table默认将字符型变量转化为因子类,该参数控制列是否保留字符型,可以是逻辑型,数值型或者是字符型向量。as.is对每列专用,而不是每个变量。因此,它对行标签(行号)列也同样适用(如果有的话)。
• na.string:代表缺失数据的值,参数na.strings是一个可以包括一个或多个缺损值得字符描述方式的向量。数值列的空字段也被看作是缺损值。一般不用设置除非有的数据中“9999”这类表示缺失值情况出现时需要特别设置。
• colClasses:指定各列数据类型的字符向量。除非你采取特别的行动,read.table将会为数据框的每个变量选择一个合适的类型。如果字段没有缺损以及不能直接转换,它会按 logical, integer, numeric 和 complex 的顺序依次判断字段类型。如果所有这些类型都失败了,变量会转变成因子。 参数 colClasses 和 as.is 提供了很大的控制权。as.is会抑制字符向量转换成因子(仅仅这个功能)。 colClasses运行为输入中的每个列设置需要的类型。
• nrows:可读取的最大行数。
• skip:读取数据时跳过的行数。有时数据中包含了特殊的文件头,或者是非结构化数据,这是需要分块处理skip可以帮助我们来跳过一些非表格结构的数据。
• check.names:逻辑型,是否对变量名字的合理性检查,一般要符合R语言的变量命名要求,比如不用用“1a”这类的非法变量名字,也不能有重复的变量名字。
• fill:逻辑型,如果为TRUE且当行的长度不一致时,用空白字段填充.
• strip.white: 用于删除不包含引号的字符型字段中头部或者尾部的空白部分。比如若表中某个列包含了“ hello” 和“hello”,如果没有引号的话,可能会被认为是同一个字符时,需要设置该参数为TRUE删除空白部分。
• blank.line.skip: 默认情况下,read.table 忽略空白行。这可以通过设置 blank.lines.skip = FALSE 来改变。这个参数只有在和fill=TRUE共同使用时才有效。这时,可能是用空白行表明规则数据中的缺损样本。
• comment.char: 字符型,用来标记注释行,如果该字符出现在某个行的开头,则改行将被忽略。默认情况下,read.table 用 # 作为注释标识字符。如果碰到该字符(除了在被引用的字符串内),该行中随后的内容将会被忽略。只含有空白和注释的行被当作空白行。 如果确认数据文件中没有注释内容,用 comment.char = "" 会比较安全 (也可能让速度比较快)。
• allowEscapes:逻辑型,是否允许使用C形式的逃逸字符。许多操作系统有在文本文件中用反斜杠作为逃逸标识字符的习惯,但是Windows系统是个例外(在路径名中使用反斜杠)。在R里面,用户可以自行设定这种习惯是否用于数据文件。控制符如 , , , , , , 八进制和十六进制如 40 和 x2A 一样描述。任何其它逃逸字符都看着是自己,包括反斜杠。
字符串函数strip()的作用是• stringsAsFactors: 逻辑型,是否将字符型向量转为因子型。注意该方法会被as.is和colClasses覆盖。
至此,R语言中读入文本文档的重要函数read.table的使用,读者根据以上内容应该可以处理下读入文本文档大部分情况。在此,笔者也强烈建议读者去实践各种利用R入读文本文档的代码。文本文件读入函数read.csv,read.csv2,read.delim, read.delim2等函数的参数使用均可参考本文。
另外,文本文档读入的加速策略也总结如下:
• 单个大文件:可以采用data.table包中的fread函数加速读取
• 多个小文件: 可使用read.table,指定colClasses,nrows,comment.char等参数可以加速读取。另外可自定义读入单个文件的子函数,然后采用parallel包中的parLapply等并行运算的方法,会显著提升读入速度。最后再用rbind这列函数将list中各个data.frame元素合并。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。