15

このtxtファイルがあるとしましょう:

"AA",3,3,3,3
"CC","ad",2,2,2,2,2
"ZZ",2
"AA",3,3,3,3
"CC","ad",2,2,2,2,2

私はread.csvできる:

> read.csv("linktofile.txt", fill=T, header=F)
  V1 V2 V3 V4 V5 V6 V7
1 AA  3  3  3  3 NA NA
2 CC ad  2  2  2  2  2
3 ZZ  2 NA NA NA NA NA
4 AA  3  3  3  3 NA NA
5 CC ad  2  2  2  2  2

しかしfread、与えます

> library(data.table)

> fread("linktofile.txt")
   V1 V2 V3 V4 V5 V6 V7
1: CC ad  2  2  2  2  2

で同じ結果を得ることができますfreadか?

4

2 に答える 2

9

メジャーアップデート

の開発計画がfread変更されたようfreadで、現在fill議論を呼んでいます。

この回答の最後と同じサンプル データを使用すると、次のようになります。

library(data.table)
packageVersion("data.table")
# [1] ‘1.9.7’
fread(x, fill = TRUE)
#    V1 V2 V3 V4 V5 V6 V7
# 1: AA  3  3  3  3 NA NA
# 2: CC ad  2  2  2  2  2
# 3: ZZ  2 NA NA NA NA NA
# 4: AA  3  3  3  3 NA NA
# 5: CC ad  2  2  2  2  2

「data.table」の開発バージョンを次のようにインストールします。

install.packages("data.table", 
                 repos = "https://Rdatatable.github.io/data.table", 
                 type = "source")

元の答え

これはあなたの質問には答えませんfread:その質問は@Mattによってすでに解決されています。

ただし、ベース R よりも速度が向上するはずですread.csv

とは異なりfread、読み取ろうとしているデータに関する情報を提供することで、これらの関数を少し支援する必要があります。

input.file「iotools」から機能を利用できます。列の型を指定することで、フォーマッタ関数に予想される列の数を伝えることができます。

library(iotools)
input.file(x, formatter = dstrsplit, sep = ",",
           col_types = rep("character", max(count.fields(x, ","))))

サンプルデータ

x <- tempfile()
myvec <- c('"AA",3,3,3,3', '"CC","ad",2,2,2,2,2', '"ZZ",2', '"AA",3,3,3,3', '"CC","ad",2,2,2,2,2')
cat(myvec, file = x, sep = "\n")

## Uncomment for bigger sample data
## cat(rep(myvec, 200000), file = x, sep = "\n")
于 2015-12-10T08:35:58.480 に答える