您好,登錄后才能下訂單哦!
函數(shù) read.table
是讀取矩形格子狀數(shù)據(jù)最為便利的方式。因為實際可能遇到的情況比較多,所以預設了一些函數(shù)。這些函數(shù)調用了 read.table
但改變了它的一些默認參數(shù)。
注意,read.table
不是一種有效地讀大數(shù)值矩陣的方法:見下面的 scan
函數(shù)。
一些需要考慮到問題是:
編碼問題
如果文件中包含非-ASCII字符字段,要確保以正確的編碼方式讀取。這是在UTF-8的本地系統(tǒng)里面讀取Latin-1文件的一個主要問題。此時,可以如下處理
read.table(file("file.dat", encoding="latin1"))
注意,這在任何可以呈現(xiàn)Latin-1名字的本地系統(tǒng)里面運行。
首行問題
我們建議你明確地設定 header
參數(shù)。按照慣例,首行只有對應列的字段而沒有行標簽對應的字段。因此,它會比余下的行少一個字段。(如果需要在 R 里面看到這一行,設置 header = TRUE
。)如果要讀取的文件里面有行標簽的頭字段(可能是空的),以下面的方式讀取
read.table("file.dat", header = TRUE, row.names = 1)
列名字可以通過 col.names
顯式地設定;顯式設定的名字會替換首行里面的列名字(如果存在的話)。
分隔符問題
通常,打開文件看一下就可以確定文件所使用的字段分隔符,但對于空白分割的文件,可以選擇默認的sep = ""
(它能使用任何空白符作為分隔符,比如空格,制表符,換行符), sep = " "
或者 sep = "\t"
。注意,分隔符的選擇會影響輸入的被引用的字符串。
如果你有含有空字段的制表符分割的文件,一定要使用 sep = "\t"
。
引用 默認情況下,字符串可以被 " 或 ' 括起,并且兩種情況下,引號內部的字符都作為字符串的一部分。有效的引用字符(可能沒有)的設置由參數(shù) quote
控制。對于sep = "\n"
,默認值改為 quote = ""
。
如果沒有設定分隔字符,在被引號括起的字符串里面,引號需要用 C格式的逃逸方式逃逸,即在引號前面直接加反斜杠 \。
如果設定了分隔符,在被引號括起的字符串里面,按照電子表格的習慣,把引號重復兩次以達到逃逸的效果。例如
'One string isn''t two',"one more"
可以被下面的命令讀取
read.table("testfile", sep = ",")
這在默認分隔符的文件里面不起作用。
缺損值 默認情況下,文件是假定用 NA
表示缺損值,但是,這可以通過參數(shù) na.strings
改變。參數(shù) na.strings
是一個可以包括一個或多個缺損值得字符描述方式的向量。
數(shù)值列的空字段也被看作是缺損值。
在數(shù)值列,值 NaN
,Inf
和 -Inf
都可以被接受的。
尾部空字段省略的行
從一個電子表格中導出的文件通常會把拖尾的空字段(包括?塹姆指舴? 忽略掉。為了讀取這樣的文件,必須設置參數(shù) fill = TRUE
。
字符字段中的空白
如果設定了分隔符,字符字段起始和收尾處的空白會作為字段一部分看待的。為了去掉這些空白,可以使用參數(shù) strip.white = TRUE
。
空白行
默認情況下,read.table
忽略空白行。這可以通過設置 blank.lines.skip = FALSE
來改變。但這個參數(shù)只有在和 fill = TRUE
共同使用時才有效。這時,可能是用空白行表明規(guī)則數(shù)據(jù)中的缺損樣本。
變量的類型
除非你采取特別的行動,read.table
將會為數(shù)據(jù)框的每個變量選擇一個合適的類型。如果字段沒有缺損以及不能直接轉換,它會按 logical
, integer
, numeric
和complex
的順序依次判斷字段類型。如果所有這些類型都失敗了,變量會轉變成因子。
參數(shù) colClasses
和 as.is
提供了很大的控制權。 as.is
會 抑制字符向量轉換成因子(僅僅這個功能)。 colClasses
運行為輸入中的每個列設置需要的類型。
注意,colClasses
和 as.is
對每 列專用,而不是每個變量。因此,它對行標簽列也同樣適用(如果有的話)。
注釋
默認情況下,read.table
用 # 作為注釋標識字符。如果碰到該字符(除了在被引用的字符串內),該行中隨后的內容將會被忽略。只含有空白和注釋的行被當作空白行。
如果確認數(shù)據(jù)文件中沒有注釋內容,用 comment.char = ""
會比較安全 (也可能讓速度比較快)。
逃逸
許多操作系統(tǒng)有在文本文件中用反斜杠作為逃逸標識字符的習慣,但是Windows系統(tǒng)是個例外(在路徑名中使用反斜杠)。在 R 里面,用戶可以自行設定這種習慣是否用于數(shù)據(jù)文件。
read.table
和 scan
都有一個邏輯參數(shù) allowEscapes
。從 R 2.2.0 開始,該參數(shù)默認為否,而且反斜杠是唯一被解釋為逃逸引用符的字符(在前面描述的環(huán)境中)。如果該參數(shù)設為是,以C形式的逃逸規(guī)則解釋,也就是控制符如 \a, \b, \f, \n, \r, \t, \v
,八進制和十六進制如 \040
和 \0x2A
一樣描述。任何其它逃逸字符都看著是自己,包括反斜杠。
常用函數(shù) read.csv
和 read.delim
為 read.table
設定參數(shù)以符合英語語系本地系統(tǒng)中電子表格導出的CSV和制表符分割的文件。這兩個函數(shù)對應的變種 read.csv2
和read.delim2
是針對在逗號作為小數(shù)點的國家使用時設計的。
如果 read.table
的可選項設置不正確,錯誤信息通常以下面的形式顯示
Error in scan(file = file, what = what, sep = sep, : line 1 did not have 5 elements
或者
Error in read.table("files.dat", header = TRUE) : more columns than column names
這些信息可能足以找到問題所在,但是輔助函數(shù) count.fields
可以進一步的深入研究問題所在。
讀大的數(shù)據(jù)格子(data grid)時,效率最重要。設定 comment.char = ""
,以原子向量類型(邏輯型,整型,數(shù)值型,復數(shù)型,字符型或原味型)設置每列的 colClasses
,給定需要讀入的行數(shù) nrows
(適當?shù)馗吖酪稽c比不設置這個參數(shù)好)等措施會提高效率。
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。