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


導入CSV、TXT文件

read.table函數:read.table函數以數據框的格式讀入數據,所以適合讀取混合模式的數據,但是要求每列的數據數據類型相同。

read.table讀取數據非常方便,通常只需要文件路徑、URL或連接對象就可以了,也接受非常豐富的參數設置:

  • file參數:這是必須的,可以是相對路徑或者絕對路徑(注意:Windows下路徑要用斜杠'/'或者雙反斜杠'\\')。
  • header參數:默認為FALSE即數據框的列名為V1,V2...,設置為TRUE時第一行作為列名。
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。
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。
data5<-read.csv('item.csv',stringAsFactors=FALSE)
  • 如果數據集中含有中文,直接導入很有可能不識別中文,這時加上參數fileEncoding='utf-8'
read.csv('data.csv',fileEncoding='utf-8')

一般這些參數足夠使用,但是當導入大量數據時可能吃不消,下面一些參數可能有所幫助(其他用途當然也可以)。

讀取大量數據時,在不加內存的情況下預先分配內存是很好的選擇。

首先reaadLines函數可以獲得數據的行數(注意L為大寫)。先判斷數據量。

lines<-readLines('item.csv')
  • comment.char:注釋默認是#后面的內容,也可以設置為其他字符。若數據中沒有注釋,則令comment.char=''可以加快讀取速度。
#若不包含注釋(默認為#),設置comment.cahr=''可能加快讀取速度,也可以指定注釋字符
data3<-read.csv('item.csv',comment.char='')
  • nrows:讀取最大行數,再加上header。讀取大量數據時可以讀取其中一部分。
data4<-read.csv('item.csv',comment.char='',nrows=10)#讀取前10行數據和header
  • skip:指定從文件開頭跳過的行數,再加上header。
#skip指定從文件開頭(不包括header)跳過的行數
data5<-read.csv('item.csv',comment.char='',nrows=10,skip=2)#跳過前兩行和header
  • colClasses:指示每一列的數據類型,先分析一部分數據得到數據類型,然后指定數據類型可以加快讀取速度。另外:“NULL”指示跳過該列,不加引號的NA軟件自動識別。
#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函數中使用。

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格式。

#下載和引用
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.斷開連接。
#安裝和引用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表格第一行作為列的變量名。

各個系統通用,並且不只是支持讀取,也可以寫入。

#安裝和引用XLConnect包
install.packages('XLConnect')
library(XLConnect)

#連接
connect<-loadWorkbook('secert.xlsx')

#讀取,A為Sheet名
readWorksheet(connect,'A')


免責聲明!

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



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