2015-06-20 17 views
5

Tôi đã xem qua một tập tin như thế này:dữ liệu cột Reading phù hợp với fread

COL1  COL2   COL3 
weqw  asrg   qerhqetjw 
weweg  ethweth  rqerhwrtjw 
rhqerhqerhq qergqer  qerhqew5h 
qerh  qergqer  wetjwryerj 

tôi không thể tải nó trực tiếp với fread vì vậy tôi thay \s+ bởi , với sed hơn tôi đã cung cấp cho fread và nó giải quyết nó. Nhưng có cách nào được tích hợp để đọc loại dữ liệu này với data.table không?

+0

Làm thế nào về 'df <- read.table ('test.dat', header = T)'? – RHertel

Trả lời

3

fread hiện chưa có bất kỳ khả năng nào để đọc fixed-width files.

Tôi cũng vậy, thường xuyên gặp phải các tệp được lưu trữ khó chịu như thế này. Vui lòng thêm yêu cầu tính năng trên Github page.

Có thể không phải như vậy trong trường hợp của bạn, nhưng giải pháp của bạn với sed sẽ không hoạt động trên nhiều FWF mà tôi gặp phải vì không có khoảng cách giữa các cột, ví dụ: bạn sẽ thấy các chuỗi như 00010 thực sự bao gồm 3 trường.

Nếu đó là trường hợp, bạn sẽ cần một cuốn từ điển rộng lĩnh vực, lúc này bạn có nhiều lựa chọn:

  1. read.fwf trong R
  2. Viết fwf ->csv chương trình (Tôi sử dụng một trong tôi đã viết trong Python và nó khá nhanh, có thể chia sẻ mã nếu bạn muốn) - về cơ bản là phiên bản tăng cường của phương pháp tiếp cận ban đầu của bạn, để bạn không bao giờ phải xử lý FWF một lần nữa
  3. Mở nó trong Excel/LibreOffice/etc; có một trình đọc FWF gốc cố gắng (thường kém) để đoán độ rộng của các cột, ít nhất một nửa công việc chỉ định chiều rộng cột cho bạn. Sau đó, bạn có thể lưu nó dưới dạng .csv hoặc bất kỳ từ đó.

Cá nhân tôi gắn bó với tùy chọn thứ hai thường xuyên nhất. read.fwf không được tối ưu hóa như fread do đó có thể sẽ chậm. Và nếu bạn đã có rất nhiều (nói 20+) của FWF để đọc, lựa chọn thứ 3 là khá tẻ nhạt.

Nhưng tôi đồng ý sẽ tốt hơn nếu có thứ gì đó như thế này được tích hợp vào fread.

+0

Có thể bạn có thể chia sẻ mã của bạn với Matt hoặc Arun ... – statquant

+0

(một phiên bản hơi cồng kềnh) mã có thể được tìm thấy trong [kho lưu trữ của tôi] này (https://github.com/MichaelChirico/wisconsin_teachers); nó không có gì đặc biệt mới lạ, tôi không nghĩ rằng ... – MichaelChirico

+1

@statquant, 'read_fwf' từ gói" readr "sẽ nhanh hơn nhiều so với' read.fwf' của cơ sở R (mặc dù sẽ không thể chạm vào tốc độ 'fread'). – A5C1D2H2I1M1N2O1R2T1

1

Đã sửa lỗi trong phiên bản hiện tại (v1.9.5) gần đây. Vui lòng nâng cấp và kiểm tra (và báo cáo nếu có bất kỳ vấn đề nào).

require(data.table) # v1.9.5+ 
fread("~/Downloads/tmp.txt") 
#   COL1 COL2  COL3 
# 1:  weqw asrg qerhqetjw 
# 2:  weweg ethweth rqerhwrtjw 
# 3: rhqerhqerhq qergqer qerhqew5h 
# 4:  qerh qergqer wetjwryerj 

fread() đạt được strip.white luận (mặc định = TRUE) trong bối cảnh tranh cãi khác. Vui lòng kiểm tra README trên trang dự án để cập nhật TIN TỨC.

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