R语言读取外部数据
使用R语言作数据分析时,往往需要读入外部数据,常用的外部数据有文本文件型、电子表格型和数据库型。本文将对以上三种外部数据的读取做一个汇总。
一、读取文本文件
一般采用read.table()函数和read.csv()函数实现文本文件数据的读取,对于这两个函数有几个重要的参数:
file指定外部文件的路径和文件名;
header指定是否将原数据的第一行最为字段名,read.table()函数默认设置为FALSE,而read.csv()函数默认设置为TRUE;
sep指定字段之间的分割符,read.table()函数默认设置为空格"",而read.csv()函数默认设置为逗号,;
除此,read.table()函数还可以设置读入数据集的行名、列名、字符串是否转换为因子、缺失值的形式等,详细可查看read.table()函数的帮助文档。
我的电脑桌面中有两个文本文件,即iris.csv和iris.txt。文件打开如下图:
现在通过read.table()函数和read.csv()函数读取这两个文件:
iris1 <- read.table(file = 'C:\\Users\\admin\\Desktop\\iris.txt', col.names = c('x1','x2','x3','x4','y'))
head(iris1)
#我比较喜欢将file设置为file.choose(),这样可以弹出选择文件的窗口,而不用写下文件路径和文件名了。
iris2 <- read.table(file = file.choose(), col.names = c('x1','x2','x3','x4','y'))
head(iris2)
#对于csv格式的数据,我比较喜欢使用read.csv()函数
iris3 <- read.csv(file = file.choose())
head(iris3)
二、读取电子表格
工作中也有很多数据是存放在EXCEL中的,对于这类数据的读取一般有两种方法,要么将xls或xlsx格式的数据转换为csv,用read.csv()函数读取;要么直接使用xlsx软件包中的read.xlsx()函数直接读取电子表格数据。有关xlsx软件包的下载可参考公众号中《R加载xlsx包报错的解决方法》一文。
library(xlsx)
iris4 <- read.xlsx(file = file.choose(), sheetIndex = 1)
head(iris4)
三、读取数据库数据
读取数据库数据应该是日常工作中最频繁的,常用的数据库有SQL Server、MySQL和Oracle等数据库,本文将以读取SQL Server和MySQL数据库数据为例。
读取SQL Server数据库中的数据
使用RODBC包可以方便快捷的读取SQL Server数据库,但在读取之前需要对计算机的数据源进行配置,过程如下:
控制面板-->管理工具-->数据源(ODBC)-->添加-->选择对应的数据库驱动-->点击完成并填写数据源名称、服务器等信息。
完成以上步骤后就可以使用R连接到数据库了。
#加载RODBC包
library(RODBC)
#建立连接
connect <- odbcConnect(dsn = 'test',uid = "", pwd = "")
#读取数据
my.data <- sqlQuery(channel = connect, query = 'select * from quantile')
head(my.data)
sqlSave(channel = connect, dat = iris, tablename = 'iris', rownames = FALSE, append = TRUE)
close(connect)
读取MySQL数据库中的数据
如果电脑中安装的MySQL数据库自带ODBC驱动器,那么读取数据的方式与读取SQL Server数据库是完全一致的;如果电脑中安装的MySQL数据库不含ODBC驱动器,那么有两种解决办法,一个是到MySQL官网下载一个ODBC驱动器(http://dev.mysql.com/downloads/connector/odbc/),另一种则直接使用R中的RMySQL包读取数据。
现在需要读取MySQL数据库中的iris数据集,操作如下:
library(RMySQL)
#建立连接
connect <- dbConnect(drv = MySQL(), user = 'root', password = 'snake', dbname = 'test', host = 'localhost')
res <- dbSendQuery(conn = connect, statement = 'select * from iris')
iris5 <- fetch(res = res, n = -1)
head(iris5)
总结:文中涉及到的R包和函数
read.table()
read.csv()
head()
xlsx包
read.xlsx()
RODBC包
odbcConnect()
sqlQuery()
sqlSave()
RMySQL包
dbConnect()
dbSentQuery()
fetch()