R语言之数据输入

谋事在人,成事在天,不求尽如人意,但求无愧于心!

       R可从键盘、文本文件、Microsoft Excel和Access、流行的统计软件、特殊格式的文件、多种关系型数据库管理系统、专业数据库、网站和在线服务中导入数据。因此本节整理了R(RStudio)中数据输入的集中方式。

在这里插入图片描述

1.键盘输入数据

      例如,创建一个含有三个变量:age(数值型) 、gender(字符型)和weight(数值型),名为mydata的数据框,然后通过mydata<-edit(mydata)或者fix(mydata)调用文本编辑器,键入数据,最后保存结果。

fix(mylist)
> mydata <- data.frame(age=numeric(0), gender=character(0), weight=numeric(0)) 
#age=numeric(0)的赋值语句将创建一个指定模式但不含实际数据的变量
> mydata
[1] age    gender weight
<0 行> (或0-长度的row.names)
> mydata<-edit(mydata)
#函数edit()事实上是在对象的一个副本上进行操作的,需要将其赋值到一个目标,才能保存输入的数据! 
> fix(mydata)

数据编辑器


       通过键盘输入数据的方式,在处理小数据集的时候比较方便有效,但是对于较大的数据集,就需要从已有的文本文件、Excel电子表格、统计软件或数据库中导入数据。

2.读取文本文件

       可以使用read.table()函数从带分隔符的文本文件中导入数据。该函数可读入一个表格格式的文件并将其保存为一个数据框。表格的每一行分别出现在文件中每一行。其语法如下:
mydataframe <- read.table(file, options)
其中,file是一个带分隔符的ASCII文本文件,options是控制如何处理数据的选项。表2-2列出了常见的选项。

选 项
描 述
header表示文件第一行是否包含有逻辑型的变量名
sep分开数据的分隔符 ,默认是 sep="",这表示了一个或多个空格、制表符、换行或回车。使用 sep=",“来读取用逗号来分隔行内数据的文件,使用 sep=”\t"来读取使用制表符来分割行内数据的文件
row.names用于指定一个或者多个行标记符的可选参数
col.names如果数据文件第一行不包含变量名(header=FALSE),则可用col.names去指定一个包含变量名的字符向量,若header=FALSE以及col.names选项被忽略,变量则会被命名为V1、V2 ……
na.strings用于表示缺失值的字符向量 ,例如:na.strings=c("-9","?") 在读取数据的时候把-9和?值转换成NA
colClasses可选的分配到每一列的类向量,比如, colClasses=c(“numeric”, “numeric”, “character”, “NULL”, “numeric”)把前两列读取为数值型变量,把第三列读取为字符型向量,跳过第四列,把第五列读取为数值型向量。如果数据有多余五列,colClasses 的值会被循环。当你在读取大型文本文件的时候,加上 colClasses 选项可以可观地提升处理的速度
quote用于对有特殊字符的字符串划定界限的字符串,默认值是(")或者(’)
skip读取数据前跳过的行的数目 ,该选项在跳过头注释的时候较有用
stringsAsFactors一个逻辑变量,标记处字符向量是否需要转化成因子,默认值是TRUE ,除非它被colClasses覆盖,处理大型文本文件设置成stringsAsFactors=FALSE可以提升处理速度
text一个指定文字进行处理的字符串,若设置了text,file应该被留空

3.导入Excel文件

       读取Excel文件需要用到read.xlsx()函数,需要安装并加载xlsx包,前提是系统已经安装了JDK,不然会有错误提示。

>install.packages("xlsx")
>library(xlsx)
> workbook<-"C:/Users/Administrator/Desktop/kaggle数据/Rstudy/pvar.xlsx"
#文件的绝对路径
> data<-read.xlsx("pvar.xlsx",sheetIndex = 1)
#file="pavr.xlsx"读取的文件名,sheetIdex=1:读取第一个工作表
> data
    PROVINCE YEAR       DN       DI      GDP       TA        CY        ZS
1     瀹夊窘 2005 3.670617 2.460838 3.728368 3.329961 1.3979400 1.3364597
2     瀹夊窘 2006 3.789510 2.588417 3.786219 3.378451 1.2988531 1.3909351
3     瀹夊窘 2007 3.894814 2.735343 3.866932 3.445570 1.4065402 1.4471580
4     瀹夊窘 2008 3.997299 2.845222 3.947025 3.509826 1.5705429 1.6085260
5     瀹夊窘 2009 4.088774 2.936413 4.002720 3.563736 1.6148972 1.6404814
6     瀹夊窘 2010 4.186080 3.039335 4.091995 3.622596 1.7160033 1.7379873
……
122   婀栧崡 2014 4.612604 3.477344 4.431964 4.057153 2.0161974 2.1610684
123   婀栧崡 2015 4.673064 3.563476 4.460931 4.105843 2.0707765 2.1798389
124   婀栧崡 2016 4.750562 3.666586 4.499018 4.165299 2.1152776 2.1908917
125   婀栧崡 2017 4.823552 3.850350 4.530238 4.224250 2.1417632 2.2177471
 [ reached 'max' / getOption("max.print") -- omitted 155 rows ]

中文乱码先不讲,后续再补充。omitted 155 rows表示省略了155行。
如果数据量较小需要全部显示,可以设置最大显示行列数,如下:

> getOption("max.print")#查看最大显示行列数
[1] 1000
>options(max.print=10000)#将最大显示行列数设置为10000,根据需要设置就可以全部显示出来了
>> data
        PROVINCE YEAR       DN       DI      GDP       TA        CY        ZS
1         瀹夊窘 2005 3.670617 2.460838 3.728368 3.329961 1.3979400 1.3364597
2         瀹夊窘 2006 3.789510 2.588417 3.786219 3.378451 1.2988531 1.3909351
3         瀹夊窘 2007 3.894814 2.735343 3.866932 3.445570 1.4065402 1.4471580
4         瀹夊窘 2008 3.997299 2.845222 3.947025 3.509826 1.5705429 1.6085260
……
276       娴欐睙 2014 4.680109 3.774298 4.603935 4.283771 2.4312029 2.4471580
277       娴欐睙 2015 4.720424 3.827369 4.632321 4.329233 2.4578819 2.4545400
278       娴欐睙 2016 4.758155 3.880814 4.674414 4.381865 2.4962375 2.4668676
279       娴欐睙 2017 4.798430 3.942702 4.714064 4.440945 2.5300716 2.5118834
280       娴欐睙 2018 4.834967 3.992730 4.763449 4.487405 2.5812668 2.5259513

此外,还可以用View()函数查看

> View(data)

在这里插入图片描述
或者

>library(xlsx)
>workbook<-"C:/Users/Administrator/Desktop/kaggle数据/Rstudy/pvar.xlsx"
>mydataframe<-read.xlsx(workbook,1)
>mydataframe

       xlsx包可以用来对Excel文件进行读取、写入和格式转换。调用read.xlsx()函数将工作表导入到数据框中。最简单的格式是read.xlsx(file, n),其中file是Excel工作簿的所在路径,n则为要导入的工作表序号。 函数read.xlsx()有些选项可以允许你指定工作表中特定的行(rowIndex)和列(colIndex) ,配合上对应每一列的(colClasses) 。大型的工作簿(比如说,100 000+个单元格),可以使用read.xlsx2()函数。这个函数用Java来运行更加多的处理过程,因此能够获得可观的质量提升。请查阅help(read.xlsx)获得更多细节, 也有其他包可以帮助你处理Excel文件。替代的包包含了XLConnect和openxlsx包XLConnect依赖于 Java,不过openxlsx并不是。所有这些软件包都可以做比导入数据更加多的事情——它们也可以创建和操作Excel文件。那些需要创建R和Excel之间的接口的程序员应该要仔细查看这些软件包中的一个或多个。

4.导入SPSS数据

      可以通过调用foreign包中的read.spss()函数将 IBM SPSS数据集导入到R中, 也可以使用Hmisc包中的spss.get()函数。函数spss.get()是对read.spss()的一个封装,它可以为你自动设置后者的许多参数,让整个转换过程更加简单一致,最后得到数据分析人员所期望的结果。

>install.packages("Hmisc")
>library(Hmisc)
>mydataframe <- spss.get("Cluster.sav", use.value.labels=TRUE) 
#mydata.sav是要导入的SPSS数据文件,use.value.labels=TRUE表示让函数将带有值标签的变量导入为R中水平对应相同的因子,mydataframe是导入后的R数据框。 
> mydataframe

5.导入SAS数据

      R语言中设计了很多用来导入SAS数据集的函数,常用的有以下几种:

函数
foreignread.ssd()
Hmiscsas.get()
sas7bdatread.sas7bdat()

如果设备中安装了SAS,sas.get()是一个好的选择。 比如,导入一个名为Cluster.sas7bdat的SAS数据集文件,它位于一台Windows机器上的C:/Users/Administrator/Desktop/kaggle数据/Rstudy文件夹中,以下代码导入了数据,并且保存为一个R数据框:

>library(Hmisc) 
>datadir <- "C:/Cluster" 
>sasexe <- "C:/Users/Administrator/Desktop/kaggle数据/Rstudy/sas.exe" 
>mydata <- sas.get(libraryName=datadir, member="clients", sasprog=sasexe) 
#libraryName是一个包含了SAS数据集的文件夹,member是数据集名字(去除掉后缀名sas7bdat) ,sasprog是到SAS可运行程序的完整路径。

6.导入Stata数据

      要将Stata数据导入R中非常简单直接。代码类如下:

>library(foreign)
>mydataframe<-read.dta("data620.dta")
>mydataframe

7.访问数据库管理系统

      R中有多种面向关系型数据库管理系统 (DBMS) 的接口, 包括Microsoft SQL Server、 Microsoft Access、MySQL、Oracle、PostgreSQL、DB2、Sybase、Teradata以及SQLite。其中一些包通过原生的数据库驱动来提供访问功能,另一些则是通过ODBC或JDBC来实现访问的。使用R来访问存储在外部数据库中的数据是一种分析大数据集的有效手段(参见附录F) ,并且能够发挥SQL和R各自的优势。

7.1. ODBC接口

      在R中通过RODBC包访问一个数据库也许是最流行的方式,这种方式允许R连接到任意一种拥有ODBC驱动的数据库。 首先要针对你的系统和数据库类型安装和配置合适的ODBC驱动——它们并不是R的一部分, 针 对 选 择 的 数 据 库 安 装 并 配 置 好 驱 动 后 , 可 以 使 用 命 令install.packages(“RODBC”)来安装 RODBC 包 。RODBC包中的主要函数如下表:

函 数
描 述
odbcConnect(dsn,uid="",pwd="")建立一个到 ODBC 数据库的连接
sqlFetch(channel,sqltable)读取ODBC数据库中的某个表到一个数据框中
sqlQuery(channel,query)向 ODBC 数据库提交一个查询并返回结果
sqlSave(channel,mydf,tablename=sqtable,append=FALSE)将数据框写入或更新 (append=TRUE) 到ODBC数据库的某个表中
sqlDrop(channel,sqtable)删除 ODBC数据库中的某个表
close(channel)关闭连接

      RODBC包允许R和一个通过ODBC连接的SQL数据库之间进行双向通信。 这就意味着你不仅可以读取数据库中的数据到R中,同时也可以使用R修改数据库中的内容。假设你想将某个数据库中的两个表(Crime和Punishment)分别导入为R中的两个名为crimedat和pundat的数据框,可以通过如下代码完成这个任务:

>library(RODBC) 
>myconn <-odbcConnect("mydsn", uid="Rob", pwd="aardvark") #通过数据源名称、用户名、密码打开一个ODBC数据库连接
>crimedat <- sqlFetch(myconn, Crime) 
>pundat <- sqlQuery(myconn, "select * from Punishment") 
>close(myconn) 

       连接字符串被传递给sqlFetch(),它将Crime表复制到R数据框crimedat中。然后我们对Punishment表执行了SQL语句select并将结果保存到数据框pundat中。最后,我们关闭了连接。 函数sqlQuery()非常强大,因为其中可以插入任意的有效SQL语句。这种灵活性赋予了你选择指定变量、对数据取子集、创建新变量,以及重编码和重命名现有变量的能力。

7.2. DBI相关包

      DBI包为访问数据库提供了一个通用且一致的客户端接口。构建于这个框架之上的RJDBC包提供了通过JDBC驱动访问数据库的方案。使用时请确保安装了针对你的系统和数据库的必要JDBC驱动。其他有用的、基于DBI的包有RMySQL、ROracle、RPostgreSQL和RSQLite。这些包都为对应的数据库提供了原生的数据库驱动,但可能不是在所有系统上都可用。详情请参阅CRAN(http://cran.r-project.org)上的相应文档。


特别注明:本文属于R语言学习笔记,不以盈利为目的,纯手工码字不容易,若整理的笔记中,对您有所助益,麻烦点个赞或者收藏,万分感谢!如有构成侵权的地方,请联系作者删除,谢谢合作!

  • 7
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值