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. eclipse启动tomcat出现8080,8009,8005端口被占用的问题

    有时候我们在eclipse中启动项目时,Tomcat服务器会报错,显示8080.8009.8005这几个端口被占用,此时你用debug启动项目时会发现不管用,console控制台什么信息也没有,此时产 ...

  2. 17.3.10--关于C元的变量类型所占字节问题和类型转化

    在C语言并没有对于严格规定short,int  long所占字节,只是做了宽泛要求:short:至少连个字节 int建议为一个机器字长,32位环境下机器字长是4个字节,64位环境机器字长是8个字节 s ...

  3. STL——算法

    以下内容大多摘自<C++标准程序库> STL提供了一些标准算法,包括搜寻.排序.拷贝.重新排序.修改.数值运算等.算法并不是容器类别的成员函数,而是一种搭配迭代器使用的全局函数. #inc ...

  4. Est数据库

    Est--编码序列,gene 片段且具有标签 其中,est数据库中是类似测序1.测序2.测序3这样的序列.实验室测得的序列是cDNA,通过上图方法拼接,电脑克隆(dbest).如果有overlap则认 ...

  5. nginx出现No input file specified.

    在lnmp上调试php项目,之前已经在上面测试过tp5框架,可以正常访问.但新项目由于项目中有些路径是写固定路径的.为了不去修改代码.配置新项目的时候,为新项目设置新的目录.问题就出现了,网页提示   ...

  6. 关于laravel的一些操作

    1.创建控制器 eg: php artisan make:controller  controllerName 如果是带命名空间需要创建控制器 则不需要加前面的  App/Http/Controlle ...

  7. 7)get方式提交表单和简单处理

    一个带有html的代码:   hello.php <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ...

  8. TPO3-2Deletion of Ogallala Aquifer

    In the face of the upcoming water supply crisis, a number of grandiose schemes have been developed t ...

  9. [SDOI2019]染色(DP)

    好神的题啊! 看了这题只会第一个subtask,又参考了HN-CJ鸽王zsy的题解,实在太菜了. 暴力转移是O(nc2),很显然没有分.考虑子任务1,2,只需要转移包含已染色格子的列,然后状态数只有O ...

  10. set_include_path详细解释(转)

    首先我们来看这个全局变量:__FILE__它表示文件的完整路径(当然包括文件名在内)也就是说它根据你文件所在的目录不同,有着不同的值:当然,当它用在包行文件中的时候,它的值是包含的路径: 然后:我们看 ...