2015-10-11 15 views
5

Mam plik csv z jedną kolumną znaczników czasowych "2000-01-01 12: 00: 00.123456". Jaki jest zalecany sposób radzenia sobie z tym w tabeli danych? Muszę zająć się grupy, dopasowywanie/skręcania przyłączyć Idate kolumny z innej tabeli, czas serii kreślenia itpTabela danych R zalecany sposób radzenia sobie z czasem Data

IDateTime("2000-01-01 12:00:00.123456") 

Error in if (any(neg)) res[neg] = paste("-", res[neg], sep = "") : 
missing value where TRUE/FALSE needed 

widzę tę odpowiedź w możliwie duplicate pytanie, w którym Matthew sugerowanej ręcznie odlewania termin do liczb całkowitych. Ale to ma 3 lata i zastanawiam się, czy istnieje lepszy sposób?

+2

Musisz przekazać mu obiekt 'POSIXct', Wypróbuj' IDateTime (as.POSIXct ("2000-01-01 12: 00: 00.123456")) '. Może być konieczne określenie strefy czasowej za pomocą argumentu 'tz' dla przypadków specjalnych. –

+0

Dzięki. Czy możesz umieścić to w odpowiedzi, abym mógł to zaakceptować? – jf328

Odpowiedz

7

IDateTime wymaga obiektu klasy POSIXct do poprawnej pracy (wydaje się również działać poprawnie z konwersją factor, nie wiem dlaczego). Zgadzam się, że nie jest to udokumentowane i być może warto otworzyć FR/PR na GH, jeśli chodzi o dokumentację - jest jednak otwarta kolejka na temat IDateTimevignette. I jest już FR w odniesieniu do umożliwienia mu pracy z klasą character.

IDateTime(as.POSIXct("2000-01-01 12:00:00.123456")) 
#   idate itime 
# 1: 2000-01-01 12:00:00 
## IDateTime(factor("2000-01-01 12:00:00.123456")) ## will also work 

zwrócić uwagę na parametr tz w as.POSIXct Jeśli chcesz uniknąć nieoczekiwanego zachowania


Niezależnie od tego, wydaje się, że błąd jest rzeczywiście spowodowane metodą druku ITime który wzywa format.ITime zobacz here i here przykład jeśli trafisz res <- IDateTime("2015-09-29 08:22:00") będzie nie powodować wystąpienie błędu, choć res będzie NA z powodu błędnej konwersji (chyba) w here (format to tylko "%H:%M:%OS"). Wydaje mi się, że jest to błąd i wciąż nie jestem pewien, dlaczego klasa factor działa poprawnie, gdy nie ma metody factor w methods(as.ITime). Być może ze względu na jego wewnętrzny tryb przechowywania, który wywołuje inną pokrewną metodę.

2

W zależności od precyzji wymaganej dla pól czasowych może być konieczne użycie POSIXct zamiast IDateTime.
Format sygnatury czasowej zapisany w pliku źródłowym może być odtworzony w R przez format(Sys.time(), "%Y-%m-%d %H:%M:%OS6").
Podczas korzystania z IDateTime utracisz podsekundy, możesz grać z ITime i sprawdzić, czy pasuje do Twoich potrzeb.
Jeśli pozostaniesz przy POSIXct, powinieneś wiedzieć o funkcji ?setNumericRounding, która może być czasami ważna, ponieważ wpływa na porządkowanie i dołączanie do bazowego numerycznego typu danych POSIXct.