2013-01-21 33 views
7

Tôi đang sử dụng fread từ data.table để tải tệp csv. Tuy nhiên, tệp csv của tôi sử dụng dec="," làm dấu phân cách thập phân (1.23 sẽ là 1,23). Không giống như trong read.csv có vẻ như là dec không phải là thông số được phép.đối số thập phân trong data.table :: fread

R) args(fread) 
function (input = "test.csv", sep = "auto", sep2 = "auto", nrows = -1, 
    header = "auto", na.strings = "NA", stringsAsFactors = FALSE, 
    verbose = FALSE, autostart = 30) 

Bạn có thấy một công trình xung quanh (một tùy chọn R để thiết lập có thể được) sẽ cho phép tôi sử dụng fread (nó là như vậy nhanh hơn nhiều mà nó tiết kiệm cho tôi rất nhiều thời gian)?

PS: colClasses chưa được thực hiện nên setAs không thể được sử dụng như thế nào trong this post

+1

Giải pháp thay thế bạn có thể thay bằng trình chỉnh sửa văn bản nhanh. – Roland

+0

Tôi sẽ nói "yêu cầu người bảo trì gói", đặc biệt là vì chức năng này đang được phát triển: http://stackoverflow.com/questions/14124813/data-table-fread-function –

+0

Cảm ơn Roland nhưng tôi có nhiều tệp cùng với một số chuỗi có thể giữ ',' trong tương lai ... và tôi không thực sự muốn thay đổi chúng. Cảm ơn mặc dù cho các đề nghị – statquant

Trả lời

8

Cập nhật tháng 10 năm 2014: Bây giờ trong v1.9.5

fread bây giờ chấp nhận dec=',' (và khác phi' . 'dấu tách thập phân), #917. Một đoạn mới đã được thêm vào ?fread. Nếu bạn sống ở một quốc gia sử dụng dec=',' thì nó chỉ hoạt động. Nếu không, bạn sẽ cần phải đọc đoạn văn cho một bước bổ sung. Trong trường hợp nó bằng cách nào đó phá vỡ dec='.', tính năng mới này có thể được tắt với options(datatable.fread.dec.experiment=FALSE).



câu trả lời Previous ...

Matt Dowle tìm thấy một công việc thoải mái xung quanh với miền địa phương. Đầu tiên tôi sessionInfo

sessionInfo() 
R version 2.15.2 (2012-10-26) 
Platform: i386-w64-mingw32/i386 (32-bit) 

locale: 
[1] LC_COLLATE=French_France.1252 LC_CTYPE=French_France.1252 LC_MONETARY=French_France.1252 LC_NUMERIC=C 
[5] LC_TIME=C 
... 

Cố gắng sau đây cho thấy thủ phạm:

Sys.localeconv()["decimal_point"] 
decimal_point 
      "." 

Đang cố gắng để thiết lập các LC_NUMERIC làm việc trên Ubuntu (Matthew) và WinXP (tôi)

Sys.setlocale("LC_NUMERIC", "French_France.1252") 
[1] "French_France.1252" 
Message d'avis : 
In Sys.setlocale("LC_NUMERIC", "French_France.1252") : 
    changer 'LC_NUMERIC' peut résulter en un fonctionnement étrange de R 

Các hành vi là tốt và thay đổi là:

DT = fread("A,B\n3,14;123\n4,22;456\n",sep=";") 
str(DT) 
Classes ‘data.table’ and 'data.frame': 2 obs. of 2 variables: 
$ V1: num 3.14 4.22 
$ V2: int 123 456 

"." dấu phân cách thập phân hiện được tải dưới dạng chuỗi (vì nó nên), nó là đối diện trước đó.

DT = fread("A,B\n3.14;123\n4.22;456\n",sep=";") 
str(DT) 
Classes ‘data.table’ and 'data.frame': 2 obs. of 2 variables: 
$ V1: chr "3.14" "4.22" 
$ V2: int 123 456 
Các vấn đề liên quan