2016-02-17 8 views
5

何らかの処理のためにcsvをRにロードしようとしましたが、データ自体を読み込もうとしているときに奇妙な問題に直面しています。read.csv()の出力

CSV doesntの任意のヘッダを持っていると私はデータ

newClick <- read.csv("test.csv", header = F) 

し、次のように読み取るために、次の簡単なコードを使用していますが、サンプルデータセットである:

10000011791441224671,V_Display,exit 
10000011951441812316,V_Display,exit 
10000013211441319797,V_Display,exit 
1000001331441725509,V_Display,exit 
10000013681418242863,C_GoogleNonBrand,V_Display,V_Display,V_Display,V_Display,_Display,V_Display,V_Display,V_Display,V_Display,V_Display,V_Display,V_Display,V_Display,V_Display,V_Display,exit 
10000014031441295393,V_Display,exit 

このデータビーイングのための出力6 obsの予想されるデータフレーム。 18変数。

しかし、ここではトリッキーな部分です。

10000011791441224671,V_Display,exit 
10000011951441812316,V_Display,exit 
1000000191441228436,V_Display,exit 
10000013211441319797,V_Display,exit 
1000001331441725509,V_Display,exit 
10000013681418242863,C_GoogleNonBrand,V_Display,V_Display,V_Display,V_Display,V_Display,V_Display,V_Display,V_Display,V_Display,V_Display,V_Display,V_Display,V_Display,V_Display,V_Display,exit 
10000014031441295393,V_Display,exit 

のように、データセットに別の行を追加した場合、これは3つの変数のうち奇妙な12個のobsです。密接に分析したところ、最後の2行目は6行に分割され、それぞれ3つの列が奇妙なことが分かりました。

これについてのご意見はありますか?

+4

'?read.table'から:データ列の数は、最初の の5行(またはそれが5つ未満の場合は入力全体)を見て決定されます。または、長さが ' ' col.names 'が指定されていて、 が長ければ 'です。 – nicola

+0

@ニコラ・グッドスチー 基本的な権利を取得したら、残りの画像を簡単に作成できます。 – hbabbar

答えて

3

コメントの中で述べたように、これは列の数が入力の最初の5行で決まるためです。もしあなたが渋滞しているなら、私はテストしてうまくいくような回避策があります。秘密は、データ内の列数の長さであるcol.namesのベクトルを入力することです。 count.fields()を使用して列の数を取得できます。 fileのファイル名を挿入します。データ列の数が>の最初の5行を見ることによって決定された」r Documentationパー

txt <- "10000011791441224671,V_Display,exit\n10000011951441812316,V_Display,exit\n1000000191441228436,V_Display,exit\n10000013211441319797,V_Display,exit\n1000001331441725509,V_Display,exit\n10000013681418242863,C_GoogleNonBrand,V_Display,V_Display,V_Display,V_Display,V_Display,V_Display,V_Display,V_Display,V_Display,V_Display,V_Display,V_Display,V_Display,V_Display,V_Display,exit\n10000014031441295393,V_Display,exit" 

ncols <- max(count.fields(textConnection(txt), sep = ",")) 
df <- read.csv(text = txt, header = FALSE, col.names = paste0("V", seq_len(ncols))) 
dim(df) 
# [1] 7 18 
0

:ここ

## get the number of columns 
ncols <- max(count.fields(file, sep = ",")) 
## read the data with all columns as character 
df <- read.csv(file, header = FALSE, col.names = paste0("V", seq_len(ncols))) 

は、あなたのデータでテストされたコードですinput(または5行未満の場合は入力全体)、または指定されて長ければ> col.namesの長さからです。これは、> fillまたはblank.lines.skipがtrueの場合、間違っている可能性があります。必要に応じてcol.namesを指定する "

最初の5行は、最初の例では、ない第二の例では、より広い観測が含まれているため、データセットは、最初に正しく入って来、そして第二に、別の行に包まれています。

これを防ぐ方法は、CSVに列ヘッダーを追加するか、read.csv関数のcol.name引数を使用して適切な量の列を定義することです。