當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


R read.table 數據輸入


R語言 read.table 位於 utils 包(package)。

說明

讀取表格格式的文件並從中創建 DataFrame ,其中案例對應於文件中字段的行和變量。

用法

read.table(file, header = FALSE, sep = "", quote = "\"'",
           dec = ".", numerals = c("allow.loss", "warn.loss", "no.loss"),
           row.names, col.names, as.is = !stringsAsFactors, tryLogical = TRUE,
           na.strings = "NA", colClasses = NA, nrows = -1,
           skip = 0, check.names = TRUE, fill = !blank.lines.skip,
           strip.white = FALSE, blank.lines.skip = TRUE,
           comment.char = "#",
           allowEscapes = FALSE, flush = FALSE,
           stringsAsFactors = FALSE,
           fileEncoding = "", encoding = "unknown", text, skipNul = FALSE)

read.csv(file, header = TRUE, sep = ",", quote = "\"",
         dec = ".", fill = TRUE, comment.char = "", ...)

read.csv2(file, header = TRUE, sep = ";", quote = "\"",
          dec = ",", fill = TRUE, comment.char = "", ...)

read.delim(file, header = TRUE, sep = "\t", quote = "\"",
           dec = ".", fill = TRUE, comment.char = "", ...)

read.delim2(file, header = TRUE, sep = "\t", quote = "\"",
            dec = ",", fill = TRUE, comment.char = "", ...)

參數

file

要從中讀取數據的文件的名稱。表的每一行顯示為文件的一行。如果不包含絕對路徑,則文件名相對於當前工作目錄 getwd() 。 Tilde-expansion 在支持的情況下執行。這可以是壓縮文件(請參閱file)。

或者,file 可以是可讀文本模式connection(如有必要,將打開以供讀取,如果是的話,則在函數調用結束時close d(並因此被銷毀))。 (如果使用 stdin(),行提示可能會有些混亂。用空行或 EOF 信號終止輸入,Unix 上為 Ctrl-D,Windows 上為 Ctrl-Zstdin() 上的任何推送都將在之前清除返回。)

file也可以是完整的URL。 (有關支持的 URL 方案,請參閱 url 幫助的“URL”部分。)

header

一個邏輯值,指示文件的第一行是否包含變量名稱。如果缺失,則根據文件格式確定該值:當且僅當第一行包含的字段比列數少一個時,header 才會設置為 TRUE

sep

字段分隔符。文件每一行上的值均以此字符分隔。如果 sep = "" (read.table 的默認值)分隔符為“空白”,即一個或多個空格、製表符、換行符或回車符。

quote

引用字符集。要完全禁用引用,請使用 quote = "" 。有關引號中嵌入的引號的行為,請參閱scan。僅當讀取為字符的列時才會考慮引用,除非指定了colClasses,否則所有列都會被引用。

dec

文件中用於小數點的字符。

numerals

指示如何轉換數字的字符串,如果轉換為雙精度會失去準確性,請參閱 type.convert 。可以縮寫。 (也適用於複數輸入。)

row.names

行名稱向量。這可以是給出實際行名稱的向量,或者給出包含行名稱的表列的單個數字,或者給出包含行名稱的表列的名稱的字符串。

如果存在標題且第一行包含的字段數少於列數,則輸入中的第一列將用作行名稱。否則,如果 row.names 缺失,則行將被編號。

使用row.names = NULL 強製行編號。缺少或 NULL row.names 生成被視為 ‘automatic’ 的行名稱(並且不由 as.matrix 保留)。

col.names

變量的可選名稱向量。默認情況下使用 "V" 後跟列號。

as.is

如果 colClasses 沒有另外指定,則控製字符變量(隻要它們不轉換為邏輯、數字或複數)到因子的轉換。它的值可以是邏輯向量(如果需要,可以回收值),也可以是數字或字符索引向量,指定哪些列不應轉換為因子。

注意:要抑製所有轉換(包括數字列的轉換),請設置 colClasses = "character"

請注意,as.is 是按列(而不是每個變量)指定的,因此包括行名稱列(如果有)以及要跳過的任何列。

tryLogical

logical 確定完全由 "F""T""FALSE""TRUE" 組成的列是否應轉換為 logical ;傳遞給 type.convert ,默認為 true。

na.strings

將被解釋為 NA 值的字符串字符向量。空白字段也被視為邏輯、整數、數字和複雜字段中的缺失值。請注意,測試是在從輸入中去除空格之後進行的,因此 na.strings 值可能需要提前去除它們自己的空格。

colClasses

特點。為列假定的類向量。如果未命名,則根據需要進行回收。如果命名,則名稱與未指定的值匹配,被視為 NA

可能的值為 NA(默認值,當使用 type.convert 時)、"NULL"(當跳過列時)、原子向量類之一(邏輯、整數、數字、複數、字符、原始)或"factor""Date""POSIXct" 。否則,需要有一個 as 方法(來自包 methods )用於從 "character" 轉換為指定的正式類。

請注意,colClasses 是按列(而不是每個變量)指定的,因此包括行名稱列(如果有)。

nrows

整數:要讀入的最大行數。負值和其他無效值將被忽略。

skip

整數:開始讀取數據之前要跳過的數據文件行數。

check.names

合乎邏輯的。如果TRUE,則檢查 DataFrame 中變量的名稱以確保它們是語法上有效的變量名稱。如有必要,它們會被調整(通過 make.names ),並確保沒有重複。

fill

合乎邏輯的。如果TRUE,那麽如果行長度不等,則會隱式添加空白字段。查看具體信息'。

strip.white

合乎邏輯的。僅在指定 sep 時使用,並允許從未加引號的 character 字段中去除前導和尾隨空白(始終去除 numeric 字段)。請參閱 scan 了解更多詳細信息(包括“空白”的確切含義),請記住列可能包含行名稱。

blank.lines.skip

邏輯:如果輸入中的 TRUE 空行被忽略。

comment.char

字符:長度為 1 的字符向量,包含單個字符或空字符串。使用"" 完全關閉注釋的解釋。

allowEscapes

合乎邏輯的。 C 風格的轉義是否應該如‘⁠\n⁠’ 被處理或逐字讀取(默認)?請注意,如果不在引號內,它們可能會被解釋為分隔符(但不能解釋為注釋字符)。欲了解更多詳情,請參閱scan.

flush

邏輯:如果 TRUEscan 將在讀取請求的最後一個字段後刷新到行尾。這允許在最後一個字段之後添加注釋。

stringsAsFactors

邏輯:字符向量應該轉換為因子嗎?請注意,這被 as.iscolClasses 覆蓋,兩者都允許更精細的控製。

fileEncoding

字符串:如果非空則聲明文件(而不是連接)上使用的編碼,以便可以重新編碼字符數據。請參閱 file 幫助的“編碼”部分、“R 數據導入/導出”手冊和“注釋”。

encoding

輸入字符串采用的編碼。它用於標記已知為 Latin-1 或 UTF-8 的字符串(請參閱Encoding):它不用於重新編碼輸入,但允許R以本機編碼處理編碼字符串(如果這兩者之一)。請參閱“值”和“注釋”。

text

字符串:如果未提供 file,則通過文本連接從 text 的值讀取數據。請注意,文字字符串可用於在 R 代碼中包含(小)數據集。

skipNul

邏輯:應該跳過 nul 嗎?

...

要傳遞給 read.table 的更多參數。

細節

該函數是將表格數據讀入的主要方法R.

除非指定 colClasses,否則所有列都將讀取為字符列,然後使用 type.convert 轉換為邏輯、整數、數字、複數或(取決於 as.is )適當的因子。 (默認情況下)在所有字段中都會解釋引號,因此像 "42" 這樣的值列將生成整數列。

如果字段或行在注釋字符或字段或行末尾之前不包含任何內容(如果未指定分隔符,則空格除外),則該字段或行為 ‘blank’。

如果未指定 row.names 並且標題行的條目數比列數少一個,則第一列被視為行名稱。這允許從打印數據幀的格式讀取數據幀。如果指定了 row.names 並且不引用第一列,則該列將從此類文件中丟棄。

數據列的數量通過查看輸入的前五行(如果少於五行則查看整個輸入)來確定,或者根據 col.names 的長度(如果已指定且更長)來確定。如果 fillblank.lines.skip 為 true,則這可能是錯誤的,因此如有必要,請指定 col.names(如“示例”中所示)。

read.csvread.csv2read.table除了默認值。它們用於讀取“逗號分隔值”文件(“.csv') 或者 (read.csv2) 在使用逗號作為小數點和使用分號作為字段分隔符的國家/地區使用的變體。相似地,read.delimread.delim2用於讀取分隔文件,默認使用製表符作為分隔符。請注意header = TRUEfill = TRUE在這些變體中,並且注釋字符被禁用。

注釋字符之後的其餘行將被跳過;評論中的引用不會被處理。允許提供完整的注釋行 blank.lines.skip = TRUE ;但是,標題之前的注釋行必須在第一個非空白列中包含注釋字符。

支持嵌入換行符的引用字段,注釋字符之後除外。不支持嵌入的 nul:跳過它們(使用 skipNul = TRUE )可能會起作用。

包含文件中數據表示的數據幀 (data.frame)。

當返回 0 行數據幀時,除非指定 col.names,否則空輸入是錯誤的:類似地,如果 header = TRUE 產生 0 行數據幀,則僅給出標題行。請注意,在任何一種情況下,除非提供了colClasses,否則列都是邏輯列。

如果 encoding"latin1""UTF-8" ,結果中的字符串(包括因子級別)將具有聲明的編碼。

CSV 文件

有關 .csv 文件的各種約定,請參閱 write.csv 的幫助。帶有行名稱的 CSV 文件的最常見形式需要使用 read.csv(..., row.names = 1) 讀取,以使用文件第一列中的名稱作為行名稱。

內存使用情況

讀取大文件時,這些函數會使用大量內存。 “R 數據導入/導出”手冊中進行了廣泛的討論,並補充了此處的注釋。

如果將colClasses 指定為六個atomic 向量類之一,則將使用更少的內存。當讀取包含許多不同數值的列時尤其如此,因為將每個不同值存儲為字符串所占用的內存最多是存儲為整數所占用的內存的 14 倍。

使用nrows,即使是輕微的over-estimate,也將有助於內存使用。

使用 comment.char = "" 將明顯比默認的 read.table 快。

read.table 不是讀取大型矩陣的正確工具,尤其是具有許多列的矩陣:它設計用於讀取可能具有非常不同類別的列的數據幀。使用 scan 代替矩陣。

注意

as.iscolClasses 中引用的列包括行名稱列(如果有)。

有兩種方法可以讀取本地編碼之外的輸入。如果已知輸入為 UTF-8 或 Latin1,請使用 encoding 參數進行聲明。如果輸入采用其他編碼,則可以在輸入時對其進行翻譯。 fileEncoding 參數通過設置連接來重新編碼到當前語言環境來實現此目的。請注意,在 Windows 或其他未在 UTF-8 區域設置中運行的係統上,這可能是不可能的。

例子

## using count.fields to handle unknown maximum number of fields
## when fill = TRUE
test1 <- c(1:5, "6,7", "8,9,10")
tf <- tempfile()
writeLines(test1, tf)

read.csv(tf, fill = TRUE) # 1 column
ncol <- max(count.fields(tf, sep = ","))
read.csv(tf, fill = TRUE, header = FALSE,
         col.names = paste0("V", seq_len(ncol)))
unlink(tf)

## "Inline" data set, using text=
## Notice that leading and trailing empty lines are auto-trimmed

read.table(header = TRUE, text = "
a b
1 2
3 4
")

參考

Chambers, J. M. (1992) Data for models. Chapter 3 of Statistical Models in S eds J. M. Chambers and T. J. Hastie, Wadsworth & Brooks/Cole.

也可以看看

“R 數據導入/導出”手冊。

scantype.convertread.fwf 用於讀取固定寬度格式的輸入; write.table; data.frame

count.fields 可用於確定讀取文件時出現的問題,這些問題會導致記錄長度不正確的報告(請參閱下麵的“示例”)。

https://www.rfc-editor.org/rfc/rfc4180 for the IANA definition of CSV files (which requires comma as separator and CRLF line endings).

相關用法


注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 Data Input。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。