参考:https://www.cnblogs.com/zhangduo/p/4440314.html
导入CSV、TXT文件
read.table函数:read.table函数以数据框的格式读入数据,所以适合读取混合模式的数据,但是要求每列的数据数据类型相同。
read.table读取数据非常方便,通常只需要文件路径、URL或连接对象就可以了,也接受非常丰富的参数设置:
- file参数:这是必须的,可以是相对路径或者绝对路径(注意:Windows下路径要用斜杠'/'或者双反斜杠'\')。
- header参数:默认为FALSE即数据框的列名为V1,V2...,设置为TRUE时第一行作为列名。
1
2
|
data1<- read.table ( 'item.csv' ) #默认header=FALSE data2<- read.table ( 'item.csv' ,header= TRUE ) |
- sep参数:分隔符,默认为空格。可以设置为逗号(comma)sep=',',分号(semicolon)sep=';'和制表符(tab)。
- read.csv、read.csv2、read.delim是read.table函数的包装,分隔符分别对应逗号,分号,制表符,同样接受read.table所有参数。
- read.csv函数header参数默认为TRUE,不同于read.table。
1
2
3
|
data3<- read.csv ( 'item.csv' ,sep= ',' ,header= TRUE ) data4<- read.table ( 'item.csv' ) #下文示例采用read.csv函数,两种写法效果相同 |
- 字符型数据读入时自动转换为因子,因子是R中的变量,它只能取有限的几个不同值,将数据保存为因子可确保模型函数能够正确处理。But当变量作为简单字符串使用时可能出错。要想防止转换为因子:1.令参数stringAsFactors=FALSE,防止导入的数据任何的因子转换。2.更改系统选项options(stringsAsFactors=FALSE)3.指定抑制转换的列:as.is=参数。通过一个索引向量指定,或者一个逻辑向量,需要转换的列取值FALSE,不需要转换的列取值TRUE。
1
|
data5<- read.csv ( 'item.csv' ,stringAsFactors= FALSE ) |
- 如果数据集中含有中文,直接导入很有可能不识别中文,这时加上参数fileEncoding='utf-8'
1
|
read.csv ( 'data.csv' ,fileEncoding= 'utf-8' ) |
一般这些参数足够使用,但是当导入大量数据时可能吃不消,下面一些参数可能有所帮助(其他用途当然也可以)。
读取大量数据时,在不加内存的情况下预先分配内存是很好的选择。
首先reaadLines函数可以获得数据的行数(注意L为大写)。先判断数据量。
1
|
lines<- readLines ( 'item.csv' ) |
- comment.char:注释默认是#后面的内容,也可以设置为其他字符。若数据中没有注释,则令comment.char=''可以加快读取速度。
1
2
|
#若不包含注释(默认为#),设置comment.cahr=''可能加快读取速度,也可以指定注释字符 data3<- read.csv ( 'item.csv' ,comment.char= '' ) |
- nrows:读取最大行数,再加上header。读取大量数据时可以读取其中一部分。
1
|
data4<- read.csv ( 'item.csv' ,comment.char= '' ,nrows=10) #读取前10行数据和header |
- skip:指定从文件开头跳过的行数,再加上header。
1
2
|
#skip指定从文件开头(不包括header)跳过的行数 data5<- read.csv ( 'item.csv' ,comment.char= '' ,nrows=10,skip=2) #跳过前两行和header |
- colClasses:指示每一列的数据类型,先分析一部分数据得到数据类型,然后指定数据类型可以加快读取速度。另外:“NULL”指示跳过该列,不加引号的NA软件自动识别。
1
2
3
4
5
6
7
|
#colClasses指示每一列的数据类型 classes<- sapply (data9,class) data6<- read.csv ( 'user.csv' ,colClasses=classes) #NULL跳过该列 data7<- read.csv ( 'user.csv' ,colClasses= list ( 'integer' , 'NULL' , 'factor' )) #不加引号的NA,软件自动识别该列 data8<- read.csv ( 'user.csv' ,colClasses= NA ) |
scan函数:返回一个向量。当读取的数据为同一模式时,scan是最佳方式,默认读取数值型数据。
若想读取其他类型,使用what=参数指定。读取大数据文件时,若想跳过某一列数据,可以在what=参数列表中使用NULL。
scan函数通常用来读取数据矩阵,嵌入matrix函数中使用。
1
2
3
4
|
value<= scan ( '1.csv' ,what= c (f1=0, NULL ,f3= '' , rep ( list ( NULL ),6),f10=0)) #第一列、第十列为数值类型,f3=''表示第三列为字符型数据,第二列和第四列到第九列跳过。rep函数不能复制null,故用列表形式添加多个NULL data<- matrix ( scan (),ncol=5,byrow= TRUE ) #scan()返回一个向量,ncol=5表示组成的矩阵为五列,矩阵默认为按列存储也可通过设置byrow=TRUE为按列存储。 |
read.fwf函数,header=参数,as.is=参数,sep=参数等,同read.table。widths=参数是一个向量,向量值是要读入的字段宽度,负数表示跳过。
读取Excel文件
如果可能的话尽量将Excel文件另保存为CSV文件,方便导入。但是无论保存为CSV还是TXT文件,都只能保存当前活动的工作表。
readxl包 可以很方便的读取,且各个系统都通用。如果只是读取的话,无疑是非常方便的方法。
只需要下载readxl包,用read_excel函数读取就可以了,并且同时支持老版本的.xls格式和新版本的.xlsx格式。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
#下载和引用 install.packages ( "readxl" ) library (readxl) #读取Excel read_excel ( "old_excel.xls" ) read_excel ( "new_excel.xlsx" ) #sheet参数,指定sheet名或者数字 read_excel ( "excel.xls" ,sheet=2) read_excel ( "excel.xls" ,sheet= "data" ) # If NAs are represented by something other than blank cells, # set the na argument read_excel ( "excel.xls" , na = "NA" ) |
RODBC包:只基于Windows
- 1.安装包和引用RODBC包,安装不加引号,引入不加引号。
- 2.连接Excel表格文件。.xls格式的Excel用odbcConnectExcel函数,.xlsx格式的Excel用odbcConnectExcel2007函数。
- 3.读取数据:sqlFetch函数,其中默认Excel表格第一行作为列的变量名。
- 4.断开连接。
1
2
3
4
5
6
7
8
9
10
11
12
|
#安装和引用RODBC包,安装不加引号,引入不加引号 install.packages ( "RODBC" ) library (RODBC) #创建连接 connect<- odbcConnectExcel ( 'secert.xls' ) #读取Excel表格,其中A为Sheet名(支持中文) sqlFetch (connect, 'A' ) #关闭R与Excel表格的连接 odbcClose (connect) |
XLConnect包:
- 1.安装包和引用XLConnect包。
- 2.连接Excel表格文件:loadWorkbook函数
- 3.读取数据:readWorksheet函数(connect,'Sheet名'),同样默认Excel表格第一行作为列的变量名。
各个系统通用,并且不只是支持读取,也可以写入。
1
2
3
4
5
6
7
8
9
|
#安装和引用XLConnect包 install.packages ( 'XLConnect' ) library (XLConnect) #连接 connect<- loadWorkbook ( 'secert.xlsx' ) #读取,A为Sheet名 readWorksheet (connect, 'A' ) |