2013-01-21 15 views
7

Używam fread z data.table do załadowania plików CSV. Jednak moje pliki csv używają dec="," jako separatora dziesiętnego (1.23 będzie 1,23). W przeciwieństwie do read.csv wydaje się, że dec nie jest dozwolonym parametrem.dec argument w 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) 

Czy widzisz obejść (opcja R ustawienie może być), która pozwoli mi korzystać fread (jest on o wiele szybciej, że oszczędza mi sporo czasu)?

PS: colClasses nie jest jeszcze zaimplementowana tak setAs nie może być używany jak w this post

+1

Jako obejście można zastąpić szybkim edytorem tekstu. – Roland

+0

Powiedziałbym "zapytaj opiekuna pakietu", zwłaszcza, że ​​ta funkcja jest w fazie rozwoju: http://stackoverflow.com/questions/14124813/data-table-fread-function –

+0

Dziękuję Roland, ale mam wiele plików plus kilka ciągów może posiadać ',' w przyszłości ... i tak naprawdę nie chcę ich zmieniać. Dzięki za propozycję – statquant

Odpowiedz

8

aktualizacji paź 2014: Teraz w v1.9.5

fread teraz akceptuje dec=',' (i innych nie-” "separatory dziesiętne", #917. Nowy akapit został dodany do ?fread. Jeśli znajdujesz się w kraju, który używa dec=',', powinien po prostu działać. Jeśli nie, musisz przeczytać akapit, aby wykonać dodatkowy krok. W przypadku, gdy w jakiś sposób zepsuje się dec='.', tę nową funkcję można wyłączyć za pomocą options(datatable.fread.dec.experiment=FALSE).



Poprzednia odpowiedź ...

Matt Dowle znaleźć ładne obejście z lokalizacjach. Pierwszy mój 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 
... 

Próby Poniżej przedstawiono winowajcę:

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

Próbując ustawić LC_NUMERIC pracował na Ubuntu (Matthew) i WinXP (ME)

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 

zachowanie jest w porządku i zmienia się:

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 

"." separatory dziesiętne są teraz ładowane jako łańcuchy (tak jak powinno), wcześniej było odwrotnie.

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