溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》
  • 首頁 > 
  • 教程 > 
  • 開發(fā)技術 > 
  • 【R】數(shù)據(jù)導入讀取read.table函數(shù)詳解,如何讀取不規(guī)則的數(shù)據(jù)(fill=T)

【R】數(shù)據(jù)導入讀取read.table函數(shù)詳解,如何讀取不規(guī)則的數(shù)據(jù)(fill=T)

發(fā)布時間:2020-07-08 04:04:06 來源:網(wǎng)絡 閱讀:4468 作者:jackwxh 欄目:開發(fā)技術


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

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

一些需要考慮到問題是:

  1. 編碼問題

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

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

    注意,這在任何可以呈現(xiàn)Latin-1名字的本地系統(tǒng)里面運行。

  2. 首行問題

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

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

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

  3. 分隔符問題

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

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

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

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

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

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

    可以被下面的命令讀取

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

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

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

    數(shù)值列的空字段也被看作是缺損值。

    在數(shù)值列,值 NaN,Inf 和 -Inf 都可以被接受的。

  6. 尾部空字段省略的行

    從一個電子表格中導出的文件通常會把拖尾的空字段(包括?塹姆指舴? 忽略掉。為了讀取這樣的文件,必須設置參數(shù) fill = TRUE。

  7. 字符字段中的空白

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

  8. 空白行

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

  9. 變量的類型

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

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

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

  10. 注釋

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

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

  11. 逃逸

    許多操作系統(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ù)好)等措施會提高效率。

 

 【R】數(shù)據(jù)導入讀取read.table函數(shù)詳解,如何讀取不規(guī)則的數(shù)據(jù)(fill=T)


向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。

AI