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より速い
- 列タイトルをデータファイルから自動的にインポートすることはできません