2016-02-17 62 views
5

我一直在試圖加載一個csv到R進行一些處理,但我在嘗試讀取數據本身時遇到一個奇怪的問題。爲read.csv輸出()

該CSV不必須任何標頭和我使用下面的簡單的代碼來讀取數據

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。經過仔細分析,我意識到整個倒數第二行被分成了六行,每行三列,每一行都很奇怪。

對此有何看法?

+4

從'?read.table':'數據列的數量是通過查看第一個輸入的第一行 確定的(或者如果輸入的行少於五行的話),或者從' col.names',如果它被指定並且 更長'。 – nicola

+0

@Nicola謝謝 一旦你獲得了基本的權利,它很容易做出其餘的圖片。 – hbabbar

回答

3

正如評論中提到的,這是因爲列的數量由前五行輸入確定的。如果您遇到困難,可以使用以下解決方法,我已經測試過,似乎運行良好。祕訣是輸入一個col.names的向量,即數據中列數的長度。我們可以通過使用count.fields()來獲得列數。插入文件名稱爲file

## 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))) 

下面是測試的代碼與數據:

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

r Documentation

「的數據列的數目是由尋找的前五個線確定>輸入(如果輸入少於5行,則輸入爲整個輸入),或者如果指定長度並且長度> col.names,那麼這可能是錯誤的,如果> fill或blank.lines.skip爲真,那麼如果需要指定col.names「

由於第一個5行包含第一個示例中較寬泛的觀察值,而第二個示例中沒有,所以數據集正確地在第一個示例中正確顯示,並且在第二個示例中包裝到單獨的行上。

確保不發生這種情況的方法是在CSV中添加列標題,或者使用read.csv函數的col.name參數定義適當的列數。