2016-02-17 20 views
5

Tôi đã cố gắng tải một csv vào R để xử lý một số nhưng tôi đang đối mặt với một vấn đề lạ khi cố đọc dữ liệu.Đầu ra cho read.csv()

Các doesnt csv có bất kỳ tiêu đề và tôi đang sử dụng mã đơn giản sau đây để đọc dữ liệu

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

Và sau đây là các tập dữ liệu mẫu:

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 

Kết quả cho dữ liệu hạnh phúc này khung dữ liệu dự kiến ​​của 6 obs. của 18 biến.

Tuy nhiên, đây là phần phức tạp. Nếu tôi thêm một hàng khác trong tập dữ liệu như

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 

Kết quả đầu ra cho điều này là một biến lạ của 3 biến. Trên phân tích chặt chẽ, tôi nhận ra rằng toàn bộ hàng cuối cùng thứ hai đã được chia thành 6 hàng với ba cột mỗi cái là lạ.

Bất kỳ suy nghĩ nào về điều này?

+4

Từ '? Read.table':' Số cột dữ liệu được xác định bằng cách xem năm dòng đầu vào đầu tiên (hoặc toàn bộ đầu vào nếu nó có ít hơn năm dòng) hoặc từ độ dài ' col.names 'nếu nó được chỉ định và dài hơn'. – nicola

+0

@Nicola Cảm ơn Khi bạn nhận được quyền cơ bản, thật dễ dàng để tạo ra phần còn lại của hình ảnh. – hbabbar

Trả lời

3

Như đã đề cập trong các nhận xét, điều này xảy ra vì số lượng cột được xác định bởi năm dòng đầu vào đầu tiên. Nếu bạn đang ở trong một mứt, đây là một cách giải quyết có thể mà tôi đã thử nghiệm và dường như chạy tốt. Bí quyết là nhập một vectơ cho col.names đó là độ dài của số cột trong dữ liệu. Chúng tôi có thể lấy số cột bằng cách sử dụng count.fields(). Chèn tên tệp của bạn cho 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))) 

Đây là mã thử nghiệm với dữ liệu của bạn:

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

mỗi sự r Documentation,

"Số lượng các cột dữ liệu được xác định bằng cách nhìn vào năm dòng đầu tiên của> đầu vào (hoặc toàn bộ đầu vào nếu nó có ít hơn năm dòng), hoặc từ độ dài> col.names nếu nó được chỉ định và dài hơn. Điều này có thể hiểu nhầm nếu> fill hoặc blank.lines.skip là true, vì vậy chỉ định col.names nếu cần thiết "

Vì 5 hàng đầu tiên chứa quan sát rộng hơn trong ví dụ đầu tiên, chứ không phải trong ví dụ thứ hai, tập dữ liệu được đưa vào chính xác đầu tiên và được bao bọc trên hàng riêng biệt.

Cách để đảm bảo điều này không xảy ra là thêm tiêu đề cột vào CSV của bạn hoặc để xác định số cột thích hợp bằng cách sử dụng đối số col.name của hàm read.csv.

Các vấn đề liên quan