R 数据的导入和导出.doc
《R 数据的导入和导出.doc》由会员分享,可在线阅读,更多相关《R 数据的导入和导出.doc(44页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、-作者xxxx-日期xxxxR 数据的导入和导出【精品文档】R 数据的导入和导出译者前言不能期望一个软件可以做所有的事情1。R 也不例外。因此, R 需要和其它东西协作。包括我们人类,需要我们输入数据,导出数据。包括我们的其它软件,Excel,SPSS,等等,数据格式都是特异的,需要R 特别处理。包括我们的数据库系统,R 不是用来管理数据的,所以需要专业的数据库帮忙。也包括不同机器间,上面编译的 R 也是需要交换数据。这一册文档就是描述这些事情的。R 的主要目的就是分析数据。虽然,你可以用它来处理文档,画个奥运会的鸟巢,R 的主要目的还是数据分析。这是专业化个性化的时代,特色取胜。这个文档在几
2、年前就写了一些。很实用的一个文档。开发人员可以大致了解 R 和其它软件大致的通讯情况,非开发人员至少可以了解, R 通过包能直接读取Excel表格。已经是凌晨了,不多写了。任何问题和建议可以给Email!感谢身边的朋友!丁国徽Email:ghding2008年1月6日Previous: Words from the Translator, Up: Notes致谢手册中关系数据库的内容部分基于Douglas Bates 和 Saikat DebRoy早期写的一个手册。本手册主要由 Brian Ripley 编写。这里用到很多扩展包都是由自愿者贡献。这里提到的包以及主要作者如下,CORBADunc
3、an Temple LangforeignThomas Lumley, Saikat DebRoy, Douglas Bates, Duncan Murdoch and Roger Bivandhdf5Marcus DanielsncdfDavid PiercencvarJuerg SchmidlirJavaSimon UrbanekRMySQLDavid James and Saikat DebRoyRNetCDFPavel MichnaRODBCMichael Lapsley and Brian RipleyRSPerlDuncan Temple LangRSPythonDuncan Te
4、mple LangSJavaJohn Chambers and Duncan Temple LangXMLDuncan Temple Lang1.1 Imports 导入导入 R 的数据中最容易的格式是简单的文本文件。对于小型或中型的问题,这种格式都可以接受的。从文本文件导入数据的原始函数(primary function)是 scan。电子表格类似数据(Spreadsheet-like data)一章中讨论的大多数比较便利的函数都是基于这个原始函数。但是,所有的统计顾问们对客户用软盘或光盘提交一些私有的二进制数据(比如,Excel 电子表格或SPSS文件)都比较熟悉。通常,可以做的最简单的事
5、情是用原始软件把数据用文本文件导出(而统计顾问们为了这个目的会在他们电脑里面安装大多数常用的软件)。不过,这不会总是可能的2。在从其它统计软件中导入数据(Importing from other statistical systems)一章中,我们会讨论一些可以在 R 里面直接读取这些文件的工具。对 Excel 电子表格,读取Excel电子表格(Reading Excel spreadsheets)一章对可以获得的相关方法进行了总结。在很少的一些例子中,出于简洁和快速访问考虑,数据以二进制格式保存。这种情况下一个例子是我们已经见过几次的图像数据。它通常以二进制流的方式保存然后在内存里面呈现,而
6、且可能在数据前面加个信息头。这种数据格式在二进制文件(Binary files)和二进制连接(Binary connections)部分都有所讨论。对于大的数据库数据,通常要借助数据库管理系统(Database management system,DBMS)来处理。我们可以通过DBMS从数据库里面提取没有格式的文本文件,但是对于大多数这一类型的DBMS,我们可以直接通过 R 的包来实现数据提取操作:见关系数据库(Relational databases)部分。通过网络连接来导入数据在网络接口(Network interfaces)一章讨论。Next: XML, Previous: Import
7、s, Up: Introduction1.2 导出到文本文件中从 R 里面导出结果通常是一个很少争论的事情,但是实际操作中仍然有一些问题。在知道目标应用软件前提下,通常把文本文件作为最为便利的中间转换工具。(如果需要二进制文件,见二进制文件(Binary files)一章)。函数 cat 是导出数据的函数的基础。它有一个file参数和append。通过连续地调用 cat 对一个文本文件写入。最好的方式是,特别需要多次这样做的时候,首先为写入或添加文本打开一个 file 连接,然后用cat连接,最后关掉(close)它。最常见的工作是把一个矩阵或数据框以数字的矩形网格方式写入文件中,而且还可能保
8、留行列的标签。这可以通过函数write.table 和 write 来完成。函数write仅可以写出一个矩阵或向量的特定列(和对一个矩阵进行转置)。函数 write.table 更为便利,它可把一个数据框(或一个可以强制转换为数据框的对象)以包含行列标签的方式写出。在把一个数据框写入到一个文本文件中时,有许多问题需要考虑。. 精度问题 大多数通过这些函数对实/复数的转换是全精度的,但是用write时,精度由options(digits)的当前设置确定。如果需要更多的控制,在一个数据框上逐列使用 format 。. 首行问题 R 倾向在首行不出现表示行名字的条目,因此在文件里面. dist cl
9、imb time Greenmantle 2.5 650 16.083 . .其它一些系统需要给行名字一个条目(可能为空),此时,可以通过在write.table 中设置参数col.names = NA 来实现。. 分隔符问题 文件中常用的字段分隔符是逗号,因为在英语语系的国家,逗号几乎不可能出现在任何字段中。这种文件被称为 CSV(逗号分隔值)文件,对应的包装函数(wrapper function) write.csv提供了适当的默认值。在一些本地系统中,逗号作为十进制位中的小数点(在write.csv函数中设置参数dec = ,) 3 ,此时CSV文件以分号作为字段分隔符: write.c
10、sv2 设置了适当的默认值。 用分号或制表符(sep = t)可能是一种比较安全的选择。. 缺损值问题 默认情况下,缺损值以 NA 形式输出,但这可以通过参数 na来改变。注意,NaN 在write.table里面以 NA 看待,但在cat 或 write里面是区别对待的。. 被引号括起的字符串 默认情况下,字符串被引号括起(包括行列的名字)。参数 quote 控制着字符和因子变量的引号引用问题。 需要注意字符串中的引号嵌套问题。三种有用的形式如下. df write.table(df) a 1 a quote write.table(df, qmethod = double) a 1 a q
11、uote write.table(df, quote = FALSE, sep = ,) a 1,a quote .逃逸(Escape)的第二种形式常用于电子表格中。.包 MASS 中的函数 write.matrix 为写矩阵提供了一种专用的接口。它同时提供了以区块方式写的可选项,这样可以降低内存的使用。用 sink 可能把标准 R 输出重定向到一个文件中,因此捕获了 print 语句(可能是暗含的)的输出。通常,这不是最有效的办法,options(width)设置可能需要增加。包 foreign里面的函数 write.foreign 用 write.table 产生文本文件,同时编写一个可以
12、让另外一个统计包读入该文本文件的代码文件。现在支持导出到 SPSS 和 Stata。Previous: Export to text files, Up: Introduction1.3 XML 文件当从一个文本文件中读取数据时,用户有责任知道并且按习惯创建文件,比如,在导出问文本文件(Export to text files)一节中提到的注释字符,是否有信息头行,分隔符,缺损值的描述方式(等等)。标签语言既可以描述内容又可以定义内容的结构,这样可以使一个文件的内容自我明了。此时,不需要为读取这些数据的软件专门提供这些细节信息。可扩展标签语言(eXtensible Markup Languag
13、e) 通常简化为 XML 可用于提供这样的结构,不仅能描述标准数据集也可以描述更复杂的数据结构。 XML 现在变得非常流行,并且作为常规数据标签和交换的标准。它被各种团体所采用,从地理数据(如地图),图像展示4 到数学等。包 XML 为在 R 和 S-PLUS 读写XML文档提供了通用的工具。它让我们可以很容易的使用这种近年出现的技术。多位研究人员正在探索如何在其它事情中用 XML 描述在不同应用软件中共享的数据集;存储不同系统共享的 R 和 S-PLUS 对象;通过 SVG (可扩展矢量图, Scalable Vector Graphics,XML 的一种针对矢量图应用的变种)描述图像;描述
14、函数文档;生成“生动的”含有文本,数据和代码的分析/报告。对 XML 包里面工具的描述已经超出本文档内容范围:详细信息和例子见该包的主页(http:/www.omegahat.org/RSXML)。 CRAN里面的包 StatDataML 是基于XML包的一个例子。Next: Importing from other statistical systems, Previous: Introduction, Up: Top2 电子表格类似的数据 Variations on read.table: read.table的变化样式 Fixed-width-format files: 固定宽度格式的文
15、件 Data Interchange Format (DIF): 数据交换格式(DIF) Using scan directly: 直接使用scan函数 Re-shaping data: 数据重塑 Flat contingency tables: 无格式列联表在导出为文本文件(Export to text files)一节,我们可以看到电子表格类似的文本文件有一系列的变化样式。在这些样式中,数据以矩形格子状呈现,而且还可能包括行列标签。在本节,我们考虑把这种文件导入 R。Next: Fixed-width-format files, Previous: Spreadsheet-like dat
16、a, Up: Spreadsheet-like data2.1 read.table 的变化样式函数 read.table 是读取矩形格子状数据最为便利的方式。因为实际可能遇到的情况比较多,所以预设了一些函数。这些函数调用了 read.table 但改变了它的一些默认参数。注意,read.table 不是一种有效地读大数值矩阵的方法:见下面的 scan 函数。一些需要考虑到问题是:1. 编码问题 如果文件中包含非-ASCII字符字段,要确保以正确的编码方式读取。这是在UTF-8的本地系统里面读取Latin-1文件的一个主要问题。此时,可以如下处理2. read.table(file(file.
17、dat, encoding=latin1) 3.注意,这在任何可以呈现Latin-1名字的本地系统里面运行。4.5. 首行问题 我们建议你明确地设定 header 参数。按照惯例,首行只有对应列的字段而没有行标签对应的字段。因此,它会比余下的行少一个字段。(如果需要在 R 里面看到这一行,设置 header = TRUE。)如果要读取的文件里面有行标签的头字段(可能是空的),以下面的方式读取6. read.table(file.dat, header = TRUE, row.names = 1) 7.列名字可以通过 col.names 显式地设定;显式设定的名字会替换首行里面的列名字(如果存在
18、的话)。8.9. 分隔符问题 通常,打开文件看一下就可以确定文件所使用的字段分隔符,但对于空白分割的文件,可以选择默认的sep = (它能使用任何空白符作为分隔符,比如空格,制表符,换行符), sep = 或者 sep = t。注意,分隔符的选择会影响输入的被引用的字符串。10.如果你有含有空字段的制表符分割的文件,一定要使用 sep = t。11.12. 引用 默认情况下,字符串可以被 或 括起,并且两种情况下,引号内部的字符都作为字符串的一部分。有效的引用字符(可能没有)的设置由参数 quote 控制。对于sep = n,默认值改为 quote = 。 如果没有设定分隔字符,在被引号括起的
19、字符串里面,引号需要用 C格式的逃逸方式逃逸,即在引号前面直接加反斜杠 。13.如果设定了分隔符,在被引号括起的字符串里面,按照电子表格的习惯,把引号重复两次以达到逃逸的效果。例如14. One string isnt two,one more 15.可以被下面的命令读取16. read.table(testfile, sep = ,) 17.这在默认分隔符的文件里面不起作用。18.19. 缺损值 默认情况下,文件是假定用 NA 表示缺损值,但是,这可以通过参数 na.strings 改变。参数 na.strings 是一个可以包括一个或多个缺损值得字符描述方式的向量。 数值列的空字段也被看作
20、是缺损值。20.在数值列,值 NaN,Inf 和 -Inf 都可以被接受的。21.22. 尾部空字段省略的行 从一个电子表格中导出的文件通常会把拖尾的空字段(包括它们的分隔符)忽略掉。为了读取这样的文件,必须设置参数 fill = TRUE。23.24. 字符字段中的空白 如果设定了分隔符,字符字段起始和收尾处的空白会作为字段一部分看待的。为了去掉这些空白,可以使用参数 strip.white = TRUE。25.26. 空白行 默认情况下,read.table 忽略空白行。这可以通过设置 blank.lines.skip = FALSE 来改变。但这个参数只有在和 fill = TRUE 共
21、同使用时才有效。这时,可能是用空白行表明规则数据中的缺损样本。27.28. 变量的类型 除非你采取特别的行动,read.table 将会为数据框的每个变量选择一个合适的类型。如果字段没有缺损以及不能直接转换,它会按 logical, integer, numeric 和 complex 的顺序依次判断字段类型。5如果所有这些类型都失败了,变量会转变成因子。29.参数 colClasses 和 as.is 提供了很大的控制权。 as.is 会 抑制字符向量转换成因子(仅仅这个功能)。 colClasses运行为输入中的每个列设置需要的类型。30.注意,colClasses 和 as.is 对每
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据的导入和导出 数据 导入 导出
限制150内