在R中,可以使用read.table()函數方便的讀取具有多列表格形式的文件數據。文件中的數據一般情況,行對應的是樣本,列(字段)對應著相應的變量。讀取的數據將組織成數據框的結構。
read.table()函數簡介
read.table()函數的用法如下:
read.table(file, header = FALSE, sep = "", quote = ""'", dec = ".", row.names, col.names, as.is = !stringsAsFactors, colClasses = NA, nrows = -1,skip = 0, blank.lines.skip = TRUE, encoding = "unknown", text, skipNul = FALSE)
主要參數的含義如下:
- file
要讀取的文件名稱,矩形表格數據的每行是文件中的一行,與scan()函數相同,如果file參數中給定的文件名不是絕對路徑,則文件名是相對於當前R的工作目錄給出的。
- header
邏輯值。用於指出文件的第一行是否為數據變量的名字。缺省情況下,由文件的格式來確定此值。如果header設置為TRUE,則要求第一行要比數據列的數量少一列。
- sep
數據的分隔符。默認情況下,sep=""。此參數用於指定數據文件中每行中數據之間使用的分隔符。默認情況下,read.table()函數以空白作為數據的分隔符,即默認情況下,read.table()函數可以將1個或多個空格、tab製表符、換行符或回車符作為分隔符。
- row.names
保存行名的向量。可以使用此參數以向量的形式給出每行的實際行名。或者要讀取的表中包含行名稱的列序號或列名字符串。在數據文件中有行頭且首行的字段名比數據列少一個的情況下,數據文件中第1列將被視為行名稱。除此情況外,在沒有給定row.names參數時,讀取的行名將會自動編號。可以使用row.names = NULL強制對行進行編號。
- col.names
指定列名的向量。缺省情況下是又"V"加上列序構成,即V1,V2,V3......
- nrows
整型數。用於指定從文件中讀取的最大行數。負數或其它無效值將會被忽略。
- skip
整型數。讀取數據時忽略的行數。
- blank.lines.skip
邏輯值,此參數值設置為TRUE時,數據文件中的空白行將被忽略。默認值為TRUE。
- encoding
假定輸入字符串的編碼方式。
- skipNul
邏輯值。是否忽略空值。默認為FALSE。
使用read.table()函數從文本文件中讀取數據
read.table()函數對於文件的擴展名沒有要求。只要數據組織是按照行和列的形式進行,且每個字段的數據以某種形式(如空白、逗號等)進行分隔即可。下面以中國統計年鑑2016版(進口需求(y)與國內生產總值(x))獲取的中國1989年到2015年的進口額及GDP的數據保存在名為gi.txt的文件中。文件中的數據組織格式如下(單位:億元):
(1)read.table("gi.txt") #直接給出文件名
讀取結果形式如下圖所示:
從結果可以看出,在沒有給定分隔符時,默認以空白分隔,並且可以看出原文件中的標題行也作為數據處理了。在沒有給定字段(變量)名稱時,read.table()函數依次給每列的變量名為v1, v2, ...。讀取結果的第1列為行標題(序號)。
(2)read.table("gi.txt", header=TRUE) #指定header指明文件中包含變量名
(3)read.table("gi.txt", header=TRUE, col.names=c("year", "x", "y")) #指定col.names
使用read.table()函數從CSV文件中獲取數據
CSV文件中的數據格式如下:
(4)read.table("0504多元迴歸開店問題.csv")
可以看出在以逗號作為分隔符的文件中,如果不指定數據的分隔符,read.table()函數會將所有的數據理解為一個字段(變量)下的數據。
(5)read.table("0504多元迴歸開店問題.csv", header=TRUE, sep=",")
(6)read.table("0504多元迴歸開店問題.csv", header=TRUE, sep=",", nrows=15)
(7)read.table("0504多元迴歸開店問題.csv", header=TRUE, sep=",", col.names=c("y", "x1", "x2"), skip=5)
指定skip參數時應該設置col.names參數,否則第一行數據將作為列名處理。
歡迎關注本號。本號將持續更新有關R語言方面的文章。內容由淺入深,從R語言的基本語法到具體的分析應用。將個人在實際工作中的知識分享給大家。