サーチ…


構文

  • (ファイル、ヘッダー= 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に渡される余分な引数

備考

プレーンテキスト形式にエクスポートすると、広い移植性のために可変クラスのようなデータにエンコードされた情報の大部分が犠牲になることに注意してください。そのような移植性を必要としないケースでは、 .RDataFeatherのようなフォーマットがより有用かもしれません。

他のタイプのファイルの入出力は、入力と出力からリンクされた他のいくつかのトピックで取り上げられています

.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

ノート

  • freadread.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"))

一般的に、これはほとんどの人にとって十分です。

行列の大きさが非常に大きいので、行列を読み込む際にメモリ割り当ての手順を考慮する必要があります。これは行列を行単位で読み込むことを意味します。

前の例を考えてみましょう。この場合、 FilePath8970 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_csvreadr::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より速い
  • 列タイトルをデータファイルから自動的にインポートすることはできません


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow