2015-07-22 26 views
11

Tôi đang cố gắng đọc tệp csv bằng readr :: read_csv trong R. Tệp csv mà tôi đang nhập có khoảng 150 cột, tôi chỉ bao gồm một vài cột đầu tiên cho ví dụ. Tôi đang tìm cách ghi đè cột thứ hai từ loại mặc định (là ngày khi tôi đọc read_csv) thành ký tự hoặc định dạng ngày khác.Ghi đè các loại cột khi nhập dữ liệu bằng readr :: read_csv() khi có nhiều cột

GIS Join Match Code Data File Year State Name State Code County Name County Code Area Name Persons: Total 
G0100010 2008-2012 Alabama 1 Autauga County 1 Autauga County, Alabama 54590 

df <- data.frame("GIS Join Match Code"="G0100010", "Data File" = "2008-2012", "State" = "Alabama", "County" = "Autauga County", "Population" = 54590) 

Vấn đề là khi tôi sử dụng readr :: read_csv, có vẻ như tôi có thể phải sử dụng tất cả các biến trong khi trọng trong col_types (xem lỗi dưới đây). Đó là cần phải chỉ định ghi đè tất cả 150 cột riêng lẻ (?) .. Câu hỏi đặt ra là: Có cách nào chỉ định ghi đè col_type của các cột cụ thể hoặc danh sách đối tượng được đặt tên không? Trong trường hợp của tôi, nó sẽ chỉ ghi đè cột "Năm tệp dữ liệu".

Tôi hiểu rằng bất kỳ cột bỏ qua sẽ được tự động phân tích, đó là tốt cho phân tích của tôi. Tôi nghĩ rằng nó được thêm phức tạp như các tên cột có một không gian trong đó trong file tôi tải về (Đối với ví dụ, "Data File năm", "Code Nhà nước") vv

tempdata <- read_csv(df, col_types = "cc") 
Error: You have 135 column names, but 2 columns 

Các tùy chọn khác Tôi đoán, nếu có thể, chỉ cần bỏ qua đọc cột thứ hai cùng nhau?

+2

đặn nó ra và điều này đã làm việc !!! temp.data <- read_csv (df, skip = 1, col_types = list ( "Năm tệp dữ liệu" = col_character())) – rajvijay

Trả lời

14

Dưới đây là câu trả lời chung chung hơn cho câu hỏi này nếu ai đó tình cờ gặp phải điều này trong tương lai. Bạn nên sử dụng "bỏ qua" để nhảy các cột vì điều này sẽ không hoạt động nếu cấu trúc nguồn dữ liệu đã nhập bị thay đổi.

Nó có thể được dễ dàng hơn trong ví dụ của bạn chỉ đơn giản là thiết lập một loại cột mặc định, và sau đó xác định bất kỳ cột khác với mặc định.

Ví dụ, nếu tất cả các cột thường là "d", nhưng cột ngày nên "D", tải dữ liệu như sau:

read_csv(df, col_types = cols(.default = "d", date = "D")) 

hoặc nếu, ví dụ, ngày cột cần được "D" và cột "xxx" là "i", làm như vậy như sau:

read_csv(df, col_types = cols(.default = "d", date = "D", xxx = "i")) 

Việc sử dụng "mặc định" ở trên là mạnh mẽ nếu bạn có nhiều cột và chỉ ngoại lệ cụ thể (chẳng hạn như "ngày" và "xxx").

2

Có. Ví dụ để buộc dữ liệu số được coi là nhân vật:

examplecsv = "a,b,c\n1,2,a\n3,4,d" 
read_csv(examplecsv) 
# A tibble: 2 x 3 
#  a  b  c 
# <int> <int> <chr> 
#1  1  2  a 
#2  3  4  d 
read_csv(examplecsv, col_types = cols(b = col_character())) 
# A tibble: 2 x 3 
#  a  b  c 
# <int> <chr> <chr> 
#1  1  2  a 
#2  3  4  d 

Lựa chọn là:

col_character() 
col_date() 
col_time() 
col_datetime() 
col_double() 
col_factor() # to enforce, will never be guessed 
col_integer() 
col_logical() 
col_number() 
col_skip() # to force skip column 

thêm: http://readr.tidyverse.org/articles/readr.html

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