參考: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'
)
|