自创立以来,R已经成为统计计算和数据分析的一个优秀软件。该软件的唾手可得以及范围广泛的程序包再加上随时提供支持的R社区,使R成为几乎任何一种和统计相关的计算任务的一个极好选择。然而,很多用户,特别是那些有其它程序语言经验的用户,并没有完全利用R的能力。由于R的特性,在其它程序语言中有用的方法在R中可能效率并不高。菲尔·斯佩克特的《R语言数据操作》展示了一系列将数据读入R并进行高效处理的方法。
除了内置的函数,还包括了可以从CRAN(综合R档案网络)下载的大量现成的程序包。展示的所有方法都利用了R的核心特性:对于通常的数据管理任务所提供的向量化运算,高效的下标使用,R函数的正确使用。
最有经验的R用户发现,特别是在处理大型数据集时。将R和其它程序结合使用可能会有帮助,尤其是数据库程序。因此,对于在R中使用数据库,以及从电子表格和其它程序创建的数据集中提取数据的方法,这些都有详细的论述。R中虽然有时会忽略字符操作,在这里却作了详细的论述。使得那些传统地使用脚本语言解决的问题完全可以用R解决。对于那些有其它程序语言经验的用户提供了有效使用程序结构——例如循环——的指南。
由于许多统计建模和图形函数需要数据框形式的数据,全书自始至终都提供了将普通函数的输出结果转化为数据框的技术。
通过使用各种不同的例子(其数据来源于R或者是轻松可得的模拟数据集),《R语言数据操作》可推荐给任何想从运行简单的例子提高到可以对实际的真实数据提供操作解决方案的R使用者。
菲尔·斯佩克特的《R语言数据操作》是近年来关于R软件应用的一部不可多得的好书,本书内容具有综合性、紧凑性和简洁性,是R语言数据处理技术的综合指南,对于统计应用和理论研究都很有帮助。本书囊括了从各种不同格式的数据文件读取数据的技术以及采用适当的R内部数据格式保存数据的技术,对于诸如日期和时间型数据的处理、下标工具的应用、字符型数据的处理以及数据框的应用技术都通过丰富的实际或模拟数据实例作了精彩讲解。
译者序前言第1章 R中的数据 1.1 模式和类 1.2 R的数据存储 1.3 模式与类的检测 1.4 R对象的结构 1.5 对象的转换 1.6 缺失值 1.7 缺失值的处理第2章 读取和写入数据 2.1 读取向量和矩阵 2.2 数据框:read.table 2.3 逗号和制表符分隔的输入文件 2.4 固定宽度输入文件 2.5 从R对象中提取数据 2.6 连接 2.7 读取大型数据文件 2.8 生成数据 2.8.1 序列 2.8.2 随机数 2.9 排列 2.9.1 随机排列 2.9.2 枚举所有排列 2.10 序列的处理 2.11 电子表格 2.11.1 基于Windows的RODBC包 2.11.2 gdata程序包(所有平台) 2.12 保存和加载R数据对象 2.13 处理二进制文件 2.14 将R对象写入ASCII格式的文件 2.14.1 write函数 2.14.2 write.table函数 2.15 从其它程序中读取数据第3章 R与数据库 3.1 SQL简介 3.1.1 导航命令 3.1.2 SQL基础 3.1.3 综合汇总 3.1.4 两个数据库的合并 3.1.5 子查询 3.1.6 修改数据库记录 3.2 ODBC 3.3 使用RODBC包 3.4 DBI包 3.5 访问MySQL数据库 3.6 执行查询 3.7 规范化的表 3.8 将数据读入MySQL 3.9 更复杂的汇总第4章 日期 4.1 as.Date 4.2 chron包 4.3 POSIX类 4.4 日期的处理 4.5 时间间隔 4.6 时间序列第5章 因子 5.1 因子的使用 5.2 数值型因子 5.3 因子的操作 5.4 根据连续变量创建因子 5.5 基于日期和时间的因子 5.6 交互作用第6章 下标 6.1 下标的基础知识 6.2 数值型下标 6.3 字符型下标 6.4 逻辑型下标 6.5 矩阵和数组的下标 6.6 矩阵的特殊函数 6.7 列表 6.8 数据框下标第7章 字符操作 7.1 字符数据的基础知识 7.2 显示和连接字符串 7.3 处理分散的字符值 7.4 R中的正则表达式 7.5 正则表达式的基础知识 7.6 拆分字符值 7.7 在R中使用正则表达式 7.8 替换和标记第8章 数据汇总 8.1 table函数 8.2 汇总路线图 8.3 将函数映射到向量或列表 8.4 将函数映射到矩阵或数组 8.5 基于组的函数映射 8.6 reshape包 8.7 R中的循环第9章 重塑数据 9.1 修改数据框中的变量 9.2 变量的重新编码 9.3 recode函数 9.4 重塑数据框 9.5 reshape包 9.6 合并数据框 9.7 在merge的环境下索引
第1章R中的数据
1 1.1模式和类
R中的每一个对象包含多个属性以描述该对象中信息的性质。R数据中最重要的两个属性是模式和类。当管理数据时,重要的一点是了解R支持的不同类型的数据的差异,当数据出现问题时,问题往往在于对于特定的运算这些数据不是正确的模式或类。
mode函数列示R中任何对象的模式,class函数列示对象的类。当进行数据操作时,最常见的单个对象模式是数字、字符和逻辑。然而,由于R中的数据通常围绕一个数据集(例如,一个矩阵或数组)旋转,往往会遇到其他模式。在确定如何在R中存储数据时,其中一个重要的考虑就是所研究数据的模式。有的对象(如矩阵或其他一些阵列)要求其中的所有数据属于相同的模式,有的(像列表和数据框)允许单一的对象中存在多种模式的数据。
除了mode和class函数,typeof函数有时可以提供关于对象类型的额外信息,虽然其用处一般地说来不像mode和class提供的信息那样大。
当规划数据怎样读入R时另一个考虑是类型数据。R提供因子类来存储这些类型的数据,而在统计建模和制图函数中对因子自动进行特殊处理。因为R只需要将每个水平存储一次,所以作为因子存储的值比普通存储值需要较少的存储空间。如果您检查一个因子对象的模式,即使它可能显示为字符数据,你会发现,它始终是数值型的,因此当对因子进行操作时,应该特别注意。class函数或者在1.3节描述的其它谓词函数之一可用于识别因子,只要这些因子存储在R中。关于因子的更多信息可在第5章找到。
2 另一个重要的数据类型是日期和时间。虽然这类信息可以作为一个简单的字符形式存储,但是这种形式很难操作。R提供了一些机制来存储日期,包括内置的Date,POSIXlt和POSIXct类,以及R使用者贡献的chron程序包。其间的差别及日期和时间的操作信息在第4章有描述。
最后,最常遇到的数据模式是列表。列表时R中最灵活的数据存储方式,因为它可以适应不同模式和长度的对象。R中的许多函数用列表的形式来保存结果,而且列表提供了累积信息增量的一种很有吸引力的方式。当你要列表的各个组成部分的模式时,可以使用sapply函数(第8.3节详细讨论),如下例所示:
> mylist = list(a=c(1,2,3),b=c("cat","dog","duck"),
+ d=factor("a","b","a"))
> sapply(mylist,mode)
a b d
"numeric" "character" "numeric"
> sapply(mylist,class)
a b d
"numeric" "character" "factor"