zoukankan      html  css  js  c++  java
  • 吴裕雄--天生自然 R语言开发学习:导入数据

    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表示包含了理想值标签的字符型向量。

  • 相关阅读:
    POJ 1887 Testing the CATCHER
    HDU 3374 String Problem
    HDU 2609 How many
    POJ 1509 Glass Beads
    POJ 1458 Common Subsequence
    POJ 1159 Palindrome
    POJ 1056 IMMEDIATE DECODABILITY
    POJ 3080 Blue Jeans
    POJ 1200 Crazy Search
    软件体系结构的艺术阅读笔记1
  • 原文地址:https://www.cnblogs.com/tszr/p/11174642.html
Copyright © 2011-2022 走看看