R Language
表形式のデータをプレーンテキストファイル(CSV、TSVなど)で読み書きする
サーチ…
構文
(ファイル、ヘッダー= TRUE、sep = "、"、引用= "" "、dec ="。 "、塗りつぶし=真、comment.char =" "、...)
(ファイル、ヘッダー= TRUE、sep = ";"、見積もり= "" "、dec ="、 "、塗りつぶし=真、comment.char =" "、...)
read_csv(file、col_names = TRUE、col_types = NULL、ロケール= default_locale()、na = c( ""、NA ")、comment =" "、trim_ws = TRUE、skip = 0、n_max = -1 、progress = interactive())
データ型= fread(入力、sep = "auto"、sep2 = "auto"、nrows = -1L、header = "auto"、na.strings = "NA"、stringsAsFactors = FALSE、verbose = getOption( "datatable (デフォルト値: "integer64")dec = if(sep!= "0");デフォルト値: "integer64" dec = if(sep!= " "" "" ""、 "、"、 "、col.names、check.names = FALSE、エンコーディング="不明 "、strip.white = TRUE、showProgress = getOption(" datatable.showProgress ")、#デフォルト:TRUEデータ。テーブル= getOption( "datatable.fread.datatable")#デフォルト:TRUE)
パラメーター
| パラメータ | 詳細 |
|---|---|
| ファイル | 読み込むCSVファイルの名前 |
| ヘッダ | 論理:.csvファイルに列名のヘッダー行が含まれていますか? |
| セップ | 文字:各行のセルを区切る記号 |
| 見積もり | character:文字列を引用するための記号 |
| dec | 文字:小数点記号として使用される記号 |
| 埋める | logical:TRUEの場合、不等長の行は空白のフィールドで埋められます。 |
| comment.char | character:csvファイルのコメントとして使用される文字。この文字の前にある行は無視されます。 |
| ... | read.tableに渡される余分な引数 |
備考
プレーンテキスト形式にエクスポートすると、広い移植性のために可変クラスのようなデータにエンコードされた情報の大部分が犠牲になることに注意してください。そのような移植性を必要としないケースでは、 .RDataやFeatherのようなフォーマットがより有用かもしれません。
他のタイプのファイルの入出力は、入力と出力からリンクされた他のいくつかのトピックで取り上げられています 。
.csvファイルのインポート
ベースRを使用したインポート
コンマ区切り値ファイル(CSV)は、 read.tableをラップするが、 sep = ","を使用してカンマに区切り文字を設定するread.csvを使用してインポートできます。
# get the file path of a CSV included in R's utils package
csv_path <- system.file("misc", "exDIF.csv", package = "utils")
# path will vary based on installation location
csv_path
## [1] "/Library/Frameworks/R.framework/Resources/library/utils/misc/exDIF.csv"
df <- read.csv(csv_path)
df
## Var1 Var2
## 1 2.70 A
## 2 3.14 B
## 3 10.00 A
## 4 -7.00 A
ユーザーフレンドリーなオプションfile.chooseは、ディレクトリをブラウズすることができます:
df <- read.csv(file.choose())
ノート
-
read.tableとは異なり、read.csvデフォルトはheader = TRUEで、最初の行が列名として使用されます。 - これらのすべての関数は、
as.is = TRUEまたはstringsAsFactors = FALSE場合、文字列をfactorクラスにデフォルトで変換しstringsAsFactors = FALSE。 -
read.csv2バリアントのデフォルトはsep = ";"コンマが小数点として使用され、セミコロンがフィールド区切り文字として使用される国のデータに使用するdec = ","
パッケージを使用したインポート
readrパッケージのread_csv関数は、より高速なパフォーマンス、大容量ファイルの進捗バー、および標準のread.csvよりも一般的なデフォルトオプション( stringsAsFactors = FALSEなど)をstringsAsFactors = FALSE 。
library(readr)
df <- read_csv(csv_path)
df
## # A tibble: 4 x 2
## Var1 Var2
## <dbl> <chr>
## 1 2.70 A
## 2 3.14 B
## 3 10.00 A
## 4 -7.00 A
data.tableを使ったインポート
data.tableパッケージは関数fread導入しています。 read.tableと似ていますが、 freadは通常、ファイルの区切り文字を自動的に推測しながら、より高速で柔軟性があります。
# get the file path of a CSV included in R's utils package
csv_path <- system.file("misc", "exDIF.csv", package = "utils")
# path will vary based on R installation location
csv_path
## [1] "/Library/Frameworks/R.framework/Resources/library/utils/misc/exDIF.csv"
dt <- fread(csv_path)
dt
## Var1 Var2
## 1: 2.70 A
## 2: 3.14 B
## 3: 10.00 A
## 4: -7.00 A
引数inputは次を表す文字列です。
- ファイル名( 例:
"filename.csv")、 - ファイルに作用するシェルコマンド( 例えば
"grep 'word' filename")、または - 入力そのもの( 例えば、
"input1, input2 \n A, B \n C, D")。
freadはdata.tableの[]の使用に適したdata.frameクラスを継承するdata.tableクラスのオブジェクトを返します。通常のdata.frameを返すには、 data.tableパラメータをFALSE設定しFALSE 。
df <- fread(csv_path, data.table = FALSE)
class(df)
## [1] "data.frame"
df
## Var1 Var2
## 1 2.70 A
## 2 3.14 B
## 3 10.00 A
## 4 -7.00 A
ノート
-
freadはread.tableと同じオプションがありません。欠落している引数の1つはna.commentであり、ソースファイルに#が含まれていると不要な動作につながる可能性があります。 -
freadのみを使用"のためにquoteパラメータ。 -
freadは、変数の型を推測するためにわずかな(5)行しか使用しません。
.tsvファイルを行列としてインポートする(基本的なR)
多くの人は、ファイルへのパスを作るときにfile.pathを使用しません。しかし、Windows、Mac、Linuxマシンで作業している場合は、通常はpaste代わりにパスを作成することをお勧めします。
FilePath <- file.path(AVariableWithFullProjectPath,"SomeSubfolder","SomeFileName.txt.gz")
Data <- as.matrix(read.table(FilePath, header=FALSE, sep ="\t"))
一般的に、これはほとんどの人にとって十分です。
行列の大きさが非常に大きいので、行列を読み込む際にメモリ割り当ての手順を考慮する必要があります。これは行列を行単位で読み込むことを意味します。
前の例を考えてみましょう。この場合、 FilePathは8970 8970ファイルが含まれ、79%のセルに0以外の値が含まれています。
system.time(expr=Data<-as.matrix(read.table(file=FilePath,header=FALSE,sep=" ") ))
system.timeはファイルを読むために267秒かかると述べています。
user system elapsed
265.563 1.949 267.563
同様に、このファイルは1行ずつ読み取ることができますが、
FilePath <- "SomeFile"
connection<- gzfile(FilePath,open="r")
TableList <- list()
Counter <- 1
system.time(expr= while ( length( Vector<-as.matrix(scan(file=connection, sep=" ", nlines=1, quiet=TRUE)) ) > 0 ) {
TableList[[Counter]]<-Vector
Counter<-Counter+1
})
user system elapsed
165.976 0.060 165.941
close(connection)
system.time(expr=(Data <- do.call(rbind,TableList)))
user system elapsed
0.477 0.088 0.565
また、 read.matrixメソッドを実装したfutile.matrixパッケージもあります。コード自体は、例1で説明したのと同じことが明らかになります。
.csvファイルのエクスポート
ベースRを使用したエクスポート
write.csv()を使用してデータをCSVファイルに書き込むことができます。
write.csv(mtcars, "mtcars.csv")
一般的に指定されたパラメータには、 row.names = FALSEおよびna = ""含まれます。
パッケージを使用したエクスポート
readr::write_csvはreadr::write_csvよりもはるかに高速で、行名もwrite.csvれません。
library(readr)
write_csv(mtcars, "mtcars.csv")
複数のcsvファイルをインポートする
files = list.files(pattern="*.csv")
data_list = lapply(files, read.table, header = TRUE)
これにより、すべてのファイルが読み込まれ、リストに追加されます。その後、すべてのdata.frameが同じ構造を持つ場合、それらを1つの大きなdata.frameに結合することができます:
df <- do.call(rbind, data_list)
固定幅ファイルのインポート
固定幅のファイルは、列のような、任意の区切り文字で区切られていないされているテキストファイルです,か;むしろ固定文字長( 幅 )を持つ。データは通常、空白で埋められます。
例:
Column1 Column2 Column3 Column4Column5
1647 pi 'important' 3.141596.28318
1731 euler 'quite important' 2.718285.43656
1979 answer 'The Answer.' 42 42
このデータテーブルが作業ディレクトリのローカルファイルconstants.txtに存在すると仮定しましょう。
ベースRでのインポート
df <- read.fwf('constants.txt', widths = c(8,10,18,7,8), header = FALSE, skip = 1)
df
#> V1 V2 V3 V4 V5
#> 1 1647 pi 'important' 3.14159 6.28318
#> 2 1731 euler 'quite important' 2.71828 5.43656
#> 3 1979 answer 'The Answer.' 42 42.0000
注意:
- 列タイトルは文字で区切る必要はありません(
Column4Column5) -
widthsパラメータは、各列の幅を定義します。 - 分割されていないヘッダーは、
read.fwf()読み取ることができません。
readrでのインポート
library(readr)
df <- read_fwf('constants.txt',
fwf_cols(Year = 8, Name = 10, Importance = 18, Value = 7, Doubled = 8),
skip = 1)
df
#> # A tibble: 3 x 5
#> Year Name Importance Value Doubled
#> <int> <chr> <chr> <dbl> <dbl>
#> 1 1647 pi 'important' 3.14159 6.28318
#> 2 1731 euler 'quite important' 2.71828 5.43656
#> 3 1979 answer 'The Answer.' 42.00000 42.00000
注意:
- readrの
fwf_*ヘルパー関数は、列の長さを指定する別の方法を提供します。自動推測(fwf_empty) - readrは基底Rより速い
- 列タイトルをデータファイルから自動的にインポートすることはできません