Csv形式のスパースデータセットがあり、その列の数は長さが異なります。ファイルテキストのサンプルを次に示します。
12223, University
12227, bridge, Sky
12828, Sunset
13801, Ground
14853, Tranceamerica
14854, San Francisco
15595, shibuya, Shrine
16126, fog, San Francisco
16520, California, ocean, summer, golden gate, beach, San Francisco
使用するとき
read.csv("data.txt", header = F)
サイズは最初の5行から決定されるため、Rはデータセットを3列であると解釈します。とにかくrにより多くの列にデータを配置するように強制する方法はありますか?
?read.table
ドキュメントの詳細は次のとおりです。
データ列の数は、入力の最初の5行(または5行未満の場合はファイル全体)を調べるか、指定されてより長い場合は
col.names
の長さから決定されます。fill
またはblank.lines.skip are true
の場合、これはおそらく間違っている可能性があるため、必要に応じてcol.names
を指定します(「例」のように)。
したがって、col.names
を長さX(Xはデータセット内のフィールドの最大数)に定義し、fill = TRUE
を設定しましょう。
dat <- textConnection("12223, University
12227, bridge, Sky
12828, Sunset
13801, Ground
14853, Tranceamerica
14854, San Francisco
15595, shibuya, Shrine
16126, fog, San Francisco
16520, California, ocean, summer, golden gate, beach, San Francisco")
read.table(dat, header = FALSE, sep = ",",
col.names = paste0("V",seq_len(7)), fill = TRUE)
V1 V2 V3 V4 V5 V6 V7
1 12223 University
2 12227 bridge Sky
3 12828 Sunset
4 13801 Ground
5 14853 Tranceamerica
6 14854 San Francisco
7 15595 shibuya Shrine
8 16126 fog San Francisco
9 16520 California ocean summer golden gate beach San Francisco
フィールドの最大数が不明な場合は、niftyユーティリティ関数count.fields
(read.table
サンプルコードで見つけました)を使用できます。
count.fields(dat, sep = ',')
# [1] 2 3 2 2 2 2 3 3 7
max(count.fields(dat, sep = ','))
# [1] 7
関連する読書に役立つ可能性がある: Rの限られた数の列のみを読む
次のようなデータを読み取ることができます。
dat <- textConnection("12223, University
12227, bridge, Sky
12828, Sunset
13801, Ground
14853, Tranceamerica
14854, San Francisco
15595, shibuya, Shrine
16126, fog, San Francisco
16520, California, ocean, summer, golden gate, beach, San Francisco")
dat <- readLines(dat)
dat <- strsplit(dat, ",")
これはリストになります。
これは動作するようです(@BlueMagisterの提案に従ってください):
tt <- read.table("~/Downloads/tmp.csv", fill=TRUE, header=FALSE,
sep=",", colClasses=c("numeric", rep("character", 6)))
names(tt) <- paste("V", 1:7, sep="")
V1 V2 V3 V4 V5 V6 V7
1 12223 University
2 12227 bridge Sky
3 12828 Sunset
4 13801 Ground
5 14853 Tranceamerica
6 14854 San Francisco
7 15595 shibuya Shrine
8 16126 fog San Francisco
9 16520 California ocean summer golden gate beach San Francisco