2016-05-20 12 views
8

Po zainstalowaniu data.table 1.9.7 w maszynie Windows, mam data.table A, gdzie jedna z jej kolumn jest typu Data. Chcę wyeksportować do pliku CSV z fwrite ale gdy uruchamiamJak uniknąć konwersji daty na idate w R data.table fwrite 1.9.7?

fwrite(A,file="out1.csv") 

się Data kolumna przekształca się Idate typu całkowitego. Muszę zachować format date, ponieważ ten plik będzie używany do innej aplikacji niż do R. Jak mogę zmienić kolumnę Data na IDate? Moja pierwsza próba polegała na użyciu

ale zajmuje to około 1000 sekund w 100M wierszy data.table. Czy istnieje sposób, aby tego uniknąć?

+4

Ponieważ masz 100 milionów wierszy, przypuszczam, że masz kilka powtarzających się dat, więc może być szybciej zrobić coś takiego jak "A [, theDate: = as.character (theDate [1L]), by = theDate]". 'fwrite' jest dość nowy, więc domyślam się, że traktowanie dat jest niedopatrzeniem i z zadowoleniem przyjęliby prośbę o dodanie jej do funkcji. – Frank

+2

@Frank Niezły pomysł. Daty znajdują się na długiej liście: [# 1664] (https://github.com/Rdatatable/data.table/issues/1664). Wasz pomysł wywołał myśl ... Fwrite mógłby wykonać wyszukiwanie wewnętrznie, zamiast konwertować każdą datę osobno. –

Odpowiedz

2

Zostało to zaimplementowane i jest szybkie. Zaktualizuj do wersji data.table v1.9.8 +. Możesz kontrolować sposób zapisywania dat za pomocą dateTimeAs="ISO"|"squash"|"epoch"|"write.csv". Zobacz aktualną wersję instrukcji obsługi fwrite strona here.

+0

Argument "dateAs" już nie istnieje. Będę musiał wrócić do 'write.csv', ponieważ moje wymagania wyjściowe nie są jedną z trzech opcji w nowym argumencie' dateTimeAs'. – ddunn801

+0

@ ddunn801 Jakie jest twoje wymaganie? Dziękuję Ci. Strona podręcznika (https://www.rdocumentation.org/packages/data.table/versions/1.10.4/topics/fwrite) zawiera zdanie "Możemy być w stanie obsłużyć jedną lub dwie dodatkowe opcje, jeśli wymagany." –

+0

Przydałaby się tylko prosta opcja daty: coś takiego jak 2017-02-16 lub coś podobnego. Po odrobinie zabawy mogę najpierw przekonwertować datę na pole postaci, a następnie przekonwertować je z powrotem po szybkim 'fwrite'. TLDR: zapisz dwie dodatkowe opcje na coś trudniejszego. Dziękuję za odpowiedź. – ddunn801