2.3.6 导入 SPSS 数据
IBM SPSS数据集可以通过foreign包中的函数read.spss()导入到R中,也可以使用Hmisc
包中的spss.get()函数。函数spss.get()是对read.spss()的一个封装,它可以为你自动设
置后者的许多参数,让整个转换过程更加简单一致,最后得到数据分析人员所期望的结果。
首先,下载并安装Hmisc包(foreign包已被默认安装):
install.packages("Hmisc")
然后使用以下代码导入数据:
library(Hmisc)
mydataframe <- spss.get("mydata.sav", use.value.labels=TRUE)
这段代码中,mydata.sav是要导入的SPSS数据文件,use.value.labels=TRUE表示让函数
将带有值标签的变量导入为R中水平对应相同的因子,mydataframe是导入后的R数据框。
2.3.7 导入 SAS 数据
R中设计了若干用来导入SAS数据集的函数,包括foreign包中的read.ssd(),Hmisc包中
的sas.get(),以及sas7bdat包中的 read.sas7bdat()。如果你安装了SAS,sas.get()是
一个好的选择。
比如说,你想导入一个名为clients.sas7bdat的SAS数据集文件,它位于一台Windows机器上的
C:/mydata文件夹中,以下代码导入了数据,并且保存为一个R数据框:
library(Hmisc)
datadir <- "C:/mydata"
sasexe <- "C:/Program Files/SASHome/SASFoundation/9.4/sas.exe"
mydata <- sas.get(libraryName=datadir, member="clients", sasprog=sasexe)
libraryName是一个包含了SAS数据集的文件夹,member是数据集名字(去除掉后缀名
sas7bdat),sasprog是到SAS可运行程序的完整路径。有很多可用的选项;查看help(sas.get)
获得更多细节。
你也可以在SAS中使用PROC EXPORT将SAS数据集保存为一个逗号分隔的文本文件,并使用
2.3.2节中叙述的方法将导出的文件读取到R中。下面是一个示例:
SAS程序: libname datadir "C:\mydata";
proc export data=datadir.clients
outfile="clients.csv"
dbms=csv;
run;
R程序:
mydata <- read.table("clients.csv", header=TRUE, sep=",")
前面两种方法要求你安装了一套完整的可运行的SAS程序。如果你没有连接SAS的途径,函
数read.sas7dbat()也许是一个好的候选项。这个函数可以直接读取sas7dbat格式的SAS数据
集。这个例子的对应代码是:
library(sas7bdat)
mydata <- read.sas7bdat("C:/mydata/clients.sas7bdat")
不像sas.get(),read.sas7dbat()忽略了SAS用户自定义格式。此外,这个函数用了明
显更多的时间来进行处理。尽管我使用这个包的时候比较好运,它依然应该被认为是实验性质的。
最后,一款名为Stat/Transfer的商业软件(在2.3.12节介绍)可以完好地将SAS数据集(包括
任何已知的变量格式)保存为R数据框。与read.sas7dbat()一样,它也不要求安装SAS。
2.3.8 导入 Stata 数据
要将Stata数据导入R中非常简单直接。所需代码类似于:
library(foreign)
mydataframe <- read.dta("mydata.dta")
这里,mydata.dta是Stata数据集,mydataframe是返回的R数据框。
2.3.9 导入 NetCDF 数据
Unidata项目主导的开源软件库NetCDF(Network Common Data Form,网络通用数据格式)
定义了一种机器无关的数据格式,可用于创建和分发面向数组的科学数据。NetCDF格式通常用
来存储地球物理数据。ncdf包和ncdf4包为NetCDF文件提供了高层的R接口。
ncdf包为通过Unidata的NetCDF库(版本3或更早)创建的数据文件提供了支持,而且在
Windows、Mac OS X和Linux上均可使用。ncdf4包支持NetCDF 4或更早的版本,但在Windows
上尚不可用。
考虑如下代码:
library(ncdf)
nc <- nc_open("mynetCDFfile")
myarray <- get.var.ncdf(nc, myvar)
在本例中,对于包含在NetCDF文件mynetCDFfile中的变量myvar,其所有数据都被读取并保
存到了一个名为myarray的R数组中。
值得注意的是,ncdf包和ncdf4包最近进行了重大升级,使用方式可能与旧版本不同。另外,
这两个包中的函数名称也不同。请阅读在线帮助以了解详情。
2.3.10 导入 HDF5 数据
HDF5(Hierarchical Data Format,分层数据格式)是一套用于管理超大型和结构极端复杂数
据集的软件技术方案。rhdf5包为R提供了一个HDF5的接口。这个包在Bioconductor网站上而不
是CRAN上提供。你可以用以下代码对之进行安装:
source("http://bioconductor.org/biocLite.R")
biocLite("rhdf5")
像XML一样,HDF5格式超出了本书的内容范围。如果想学习更多相关知识,可访问HDF
Group 网站( http://www.hdf5group.org/ )。 由 Bernd Fischer 编写的 http://www.bioconductor.org/
packages/release/bioc/vignettes/rhdf5/inst/doc/rhdf5.pdf是一个rhdf5包的优秀指南。
2.3.11 访问数据库管理系统
R中有多种面向关系型数据库管理系统(DBMS)的接口,包括Microsoft SQL Server、Microsoft
Access、MySQL、Oracle、PostgreSQL、DB2、Sybase、Teradata以及SQLite。其中一些包通过原
生的数据库驱动来提供访问功能,另一些则是通过ODBC或JDBC来实现访问的。使用R来访问存
储在外部数据库中的数据是一种分析大数据集的有效手段(参见附录F),并且能够发挥SQL和R

RODBC包允许R和一个通过ODBC连接的SQL数据库之间进行双向通信。这就意味着你不仅可
以读取数据库中的数据到R中,同时也可以使用R修改数据库中的内容。假设你想将某个数据库
中的两个表(Crime和Punishment)分别导入为R中的两个名为crimedat和pundat的数据框,可
以通过如下代码完成这个任务:
library(RODBC)
myconn <-odbcConnect("mydsn", uid="Rob", pwd="aardvark")
crimedat <- sqlFetch(myconn, Crime)
pundat <- sqlQuery(myconn, "select * from Punishment")
close(myconn)
这里首先载入了RODBC包,并通过一个已注册的数据源名称(mydsn)和用户名(rob)以
及密码(aardvark)打开了一个ODBC数据库连接。连接字符串被传递给sqlFetch(),它将
Crime表复制到R数据框crimedat中。然后我们对Punishment表执行了SQL语句select并将结果保存到数据框pundat中。最后,我们关闭了连接。
函数sqlQuery()非常强大,因为其中可以插入任意的有效SQL语句。这种灵活性赋予了你
选择指定变量、对数据取子集、创建新变量,以及重编码和重命名现有变量的能力。
2. DBI相关包
DBI包为访问数据库提供了一个通用且一致的客户端接口。构建于这个框架之上的RJDBC包
提供了通过JDBC驱动访问数据库的方案。使用时请确保安装了针对你的系统和数据库的必要
JDBC驱动。其他有用的、基于DBI的包有RMySQL、ROracle、RPostgreSQL和RSQLite。这些
包都为对应的数据库提供了原生的数据库驱动,但可能不是在所有系统上都可用。详情请参阅

CRAN(http://cran.r-project.org)上的相应文档。
 
2.3.12 通过 Stat/Transfer 导入数据
在我们结束数据导入的讨论之前,值得提到一款能让上述任务的难度显著降低的商业软件。
Stat/Transfer(www.stattransfer.com)是一款可在34种数据格式之间作转换的独立应用程序,其中
包括R中的数据格式(见图2-4)。

2.4 数据集的标注
为了使结果更易解读,数据分析人员通常会对数据集进行标注。这种标注包括为变量名添加
描述性的标签,以及为类别型变量中的编码添加值标签。例如,对于变量age,你可能想附加一
个描述更详细的标签“Age at hospitalization (in years)”(入院年龄)。对于编码为1或2的性别变量
gender,你可能想将其关联到标签“male”和“female”上。
2.4.1 变量标签
遗憾的是,R处理变量标签的能力有限。一种解决方法是将变量标签作为变量名,然后通过位置下标来访问这个变量。考虑之前病例数据框的例子。名为age的第二列包含着个体首次入院
时的年龄。代码:
names(patientdata)[2] <- "Age at hospitalization (in years)"
将age重命名为"Age at hospitalization (in years)"。很明显,新的变量名太长,不适 2
合重复输入。作为替代,你可以使用patientdata[2]来引用这个变量,而在本应输出age的地
方输出字符串"Age at hospitalization (in years)"。很显然,这个方法并不理想,如果
你能尝试想出更好的命名(例如,admissionAge)可能会更好一点。
2.4.2 值标签
函数factor()可为类别型变量创建值标签。继续上例,假设你有一个名为gender的变量,
其中1表示男性,2表示女性。你可以使用代码:
patientdata$gender <- factor(patientdata$gender,
levels = c(1,2),
labels = c("male", "female"))
来创建值标签。
这里levels代表变量的实际值,而labels表示包含了理想值标签的字符型向量。

吴裕雄--天生自然 R语言开发学习:导入数据的更多相关文章

  1. 吴裕雄--天生自然 R语言开发学习:数据集和数据结构

    数据集的概念 数据集通常是由数据构成的一个矩形数组,行表示观测,列表示变量.表2-1提供了一个假想的病例数据集. 不同的行业对于数据集的行和列叫法不同.统计学家称它们为观测(observation)和 ...

  2. 吴裕雄--天生自然 R语言开发学习:R语言的安装与配置

    下载R语言和开发工具RStudio安装包 先安装R

  3. 吴裕雄--天生自然 R语言开发学习:使用键盘、带分隔符的文本文件输入数据

    R可从键盘.文本文件.Microsoft Excel和Access.流行的统计软件.特殊格 式的文件.多种关系型数据库管理系统.专业数据库.网站和在线服务中导入数据. 使用键盘了.有两种常见的方式:用 ...

  4. 吴裕雄--天生自然 R语言开发学习:R语言的简单介绍和使用

    假设我们正在研究生理发育问 题,并收集了10名婴儿在出生后一年内的月龄和体重数据(见表1-).我们感兴趣的是体重的分 布及体重和月龄的关系. 可以使用函数c()以向量的形式输入月龄和体重数据,此函 数 ...

  5. 吴裕雄--天生自然 R语言开发学习:基础知识

    1.基础数据结构 1.1 向量 # 创建向量a a <- c(1,2,3) print(a) 1.2 矩阵 #创建矩阵 mymat <- matrix(c(1:10), nrow=2, n ...

  6. 吴裕雄--天生自然 R语言开发学习:图形初阶(续二)

    # ----------------------------------------------------# # R in Action (2nd ed): Chapter 3 # # Gettin ...

  7. 吴裕雄--天生自然 R语言开发学习:图形初阶(续一)

    # ----------------------------------------------------# # R in Action (2nd ed): Chapter 3 # # Gettin ...

  8. 吴裕雄--天生自然 R语言开发学习:图形初阶

    # ----------------------------------------------------# # R in Action (2nd ed): Chapter 3 # # Gettin ...

  9. 吴裕雄--天生自然 R语言开发学习:基本图形(续二)

    #---------------------------------------------------------------# # R in Action (2nd ed): Chapter 6 ...

随机推荐

  1. GNU Autotool介绍

    参考文档: automake(GNU教程) 几句话说清楚17:用Makefile.am和configure.ac构建一个专业的Hello World Creatingamhello-1.0.tar.g ...

  2. excel 导出长数据 变成科学计数 解决办法

    加 “\t”

  3. 从[Greenplum 6.0] 1分钟安装尝鲜开始

    Greenplum目前6版本目前已经迭代了几个小版本了,随着版本的更新,不断的有bug被修复. 打算试用的朋友可以入手了. 作为开年的第一个工作日的第一个帖子,必须从“开天辟地”的6.0开始.以下内容 ...

  4. Redis--初识Redis

    Redis 是一个远程内存数据库,它不仅性能强劲,而且还具有复制特性以及为解决问题而生的独一无二的数据模型.Redis 提供了 5 种不同类型的数据结构,各式各样的问题都可以很自然的映射到这些数据结构 ...

  5. Python 学习笔记:Python 操作 SQL Server 数据库

    最近要将数据写到数据库里,学习了一下如何用 Python 来操作 SQL Server 数据库. 一.连接数据库: 首先,我们要连接 SQL Server 数据库,需要安装 pymssql 这个第三方 ...

  6. JavaScript学习笔记 - 进阶篇(7)- 浏览器对象

    window对象 window对象是BOM的核心,window对象指当前的浏览器窗口. window对象方法: 注意:在JavaScript基础篇中,已讲解了部分属性,window对象重点讲解计时器. ...

  7. Prometheus监控系统之入门篇(一)

    1. 简介 Prometheus: (简称Prom)是由SoundCloud开发的开源监控报警系统.是大名鼎鼎的CNCF云原生基金会下的第二大开源项目.具有如下特点: 使用Go语言开发 内置时序数据库 ...

  8. 机器学习总结(参考源码ml.hpp)

    依据机器学习算法如何学习数据可分为3类: 有监督学习:从有标签的数据学习,得到模型参数,对测试数据正确分类: 无监督学习:没有标签,计算机自己寻找输入数据可能的模型: 强化学习(reinforceme ...

  9. 【转】修改Ubuntu系统的登陆信息的简单方法

    转自http://www.jb51.net/os/Ubuntu/414663.html Ubuntu的登陆和欢迎信息控制/etc/issue和/etc/motd/etc/issue与/etc/motd ...

  10. 再来看看Java8的新特征——lambda表达式

    什么是lambda表达式? 可以把Lambda表达式理解为简洁地表示可传递的匿名函数的一种方式:它没有名称,但它有参数列表.函数主体.返回类型,可能还有一个可以抛出的异常列表. 比如说new一个Thr ...