R—讀取數據(導入csv,txt,excel文件)


參考: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.tablewidths=參數是一個向量,向量值是要讀入的字段寬度,負數表示跳過。

讀取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' )


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM