R語言數據讀入函數read.table


1.read.table:可以讀TXT也可以讀CSV

(1)file:文件名

(2)header:是否包含表頭

(3)sep:分隔符,如果不設定默認是空格

(4)dec:標志小數點符號,有些國家的小數點是逗號

(5)quote:字符串中間如果有引號的處理

(6)row.names:行名,行名不能重復。row.names=1,表示將第一列設置為行號

(7)col.names:列名

 

函數 read.table 是讀取矩形格子狀數據最為便利的方式。因為實際可能 遇到的情況比較多,所以預設了一些函數。這些函數調用了 read.table 但改變了它的一些默認參數。

注意,read.table 不是一種有效地讀大數值矩陣的方法: 見下面的 scan 函數。

一些需要考慮到問題是:

  1. 編碼問題

    如果文件中包含非-ASCII字符字段,要確保以正確的編碼方式讀取。 這是在UTF-8的本地系統里面讀取Latin-1文件的一個主要問題。 此時,可以如下處理

              read.table(file("file.dat", encoding="latin1"))
         

    注意,這在任何可以呈現Latin-1名字的本地系統里面運行。

  2. 首行問題

    我們建議你明確地設定 header 參數。按照慣例,首行只有對應列的字段而 沒有行標簽對應的字段。因此,它會比余下的行少一個字段。 (如果需要在 R 里面看到這一行,設置 header = TRUE。) 如果要讀取的文件里面有行標簽的頭字段(可能是空的), 以下面的方式讀取

              read.table("file.dat", header = TRUE, row.names = 1)
         

    列名字可以通過 col.names 顯式地設定; 顯式設定的名字會替換首行里面的列名字(如果存在的話)。

  3. 分隔符問題

    通常,打開文件看一下就可以確定文件所使用的字段分隔符, 但對於空白分割的文件,可以選擇默認的sep = "" ( 它能使用任何空白符作為分隔符,比如空格,制表符,換行符), sep = " " 或者 sep = "\t"。 注意,分隔符的選擇會影響輸入的被引用的字符串。

    如果你有含有空字段的制表符分割的文件, 一定要使用 sep = "\t"

  4. 引用 默認情況下,字符串可以被 " 或 ' 括起,並且兩種情況下,引號內部的字符都作為 字符串的一部分。有效的引用字符(可能沒有)的設置由 參數 quote 控制。對於sep = "\n", 默認值改為 quote = ""

    如果沒有設定分隔字符,在被引號括起的字符串里面,引號需要用 C格式的逃逸方式逃逸,即在引號前面直接加反斜杠 \。

    如果設定了分隔符,在被引號括起的字符串里面,按照電子表格的習慣, 把引號重復兩次以達到逃逸的效果。例如

              'One string isn''t two',"one more"
         

    可以被下面的命令讀取

              read.table("testfile", sep = ",")
         

    這在默認分隔符的文件里面不起作用。

  5. 缺損值 默認情況下,文件是假定用 NA 表示缺損值, 但是,這可以通過參數 na.strings 改變。 參數 na.strings 是一個可以包括一個或多個 缺損值得字符描述方式的向量。

    數值列的空字段也被看作是缺損值。

    在數值列,值 NaNInf 和 -Inf 都可以被接受的。

  6. 尾部空字段省略的行

    從一個電子表格中導出的文件通常會把拖尾的空字段(包括它們的分隔符) 忽略掉。為了讀取這樣的文件,必須設置 參數 fill = TRUE

  7. 字符字段中的空白

    如果設定了分隔符,字符字段起始和收尾處的空白會作為字段一部分看待的。 為了去掉這些空白,可以使用參數 strip.white = TRUE

  8. 空白行

    默認情況下,read.table 忽略空白行。 這可以通過設置 blank.lines.skip = FALSE 來改變。 但這個參數只有在和 fill = TRUE 共同使用時才有效。 這時,可能是用空白行表明規則數據中的缺損樣本。

  9. 變量的類型

    除非你采取特別的行動,read.table 將會為數據框的每個變量 選擇一個合適的類型。如果字段沒有缺損以及不能直接轉換,它會按 logical, integer, numeric 和 complex 的 順序依次判斷字段類型。1如果所有這些類型都失敗了, 變量會轉變成因子。

    參數 colClasses 和 as.is 提供了很大的控制權。 as.is 會 抑制字符向量轉換成因子(僅僅這個功能)。 colClasses運行為輸入中的每個列設置需要的類型。

    注意,colClasses 和 as.is 對 列專用, 而不是個變量。因此,它對行標簽列也同樣適用(如果有的話)。

  10. 注釋

    默認情況下,read.table 用 # 作為注釋標識字符。 如果碰到該字符(除了在被引用的字符串內),該行中隨后的內容將會被忽略。 只含有空白和注釋的行被當作空白行。

    如果確認數據文件中沒有注釋內容,用 comment.char = "" 會比較安全 (也可能讓速度比較快)。

  11. 逃逸

    許多操作系統有在文本文件中用反斜杠作為逃逸標識字符的習慣, 但是Windows系統是個例外(在路徑名中使用反斜杠)。 在 R 里面,用戶可以自行設定 這種習慣是否用於數據文件。

    read.table 和 scan 都有一個邏輯參數 allowEscapes。 從 R 2.2.0 開始,該參數默認為否,而且反斜杠是唯一被解釋為 逃逸引用符的字符(在前面描述的環境中)。如果該參數設為是, 以C形式的逃逸規則解釋,也就是控制符如 \a, \b, \f, \n, \r, \t, \v,八進制和十六進制如 \040 和 \0x2A 一樣描述。任何其它逃逸字符都看着是自己,包括反斜杠。

常用函數 read.csv 和 read.delim 為 read.table 設定參數以符合英語語系本地系統中電子表格導出的CSV和制表符分割的文件。 這兩個函數對應的變種 read.csv2 和 read.delim2 是針對在逗號作為小數點的國家使用時設計的2

如果 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

這些信息可能足以找到問題所在,但是輔助函數 count.fields 可以進一步的深入研究問題所在。

讀大的數據格子(data grid)時,效率最重要。設定 comment.char = "", 以原子向量類型(邏輯型,整型,數值型,復數型,字符型或原味型)設置每列的 colClasses ,給定需要讀入的行數 nrows (適當地高估一點比不設置 這個參數好)等措施會提高效率。


免責聲明!

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



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