2016-02-05 3 views
3

Вот странный артефакт. Я преобразование десятков тысяч векторов символов в класс даты и времени, например, так:as.POSIXct/as.POSIXlt не нравится .61 миллисекунды

alles$DateTime=as.POSIXct(alles$roughdate, tz="EST",format="%Y%m%d.%H%M%S.%OS") 

Довольно прямо вперед. Строка символов (alles$roughdate) представлена ​​в формате YYYYMMDD.HHMMSS.ss, а .ss - миллисекунды. Вышеприведенный код работает, как и следовало ожидать. Однако, если миллисекунды равны .61, он возвращает NA вместо значения даты.

Это не так уж плохо, но, имея дело с десятками тысяч ячеек, несколько сотен всегда возвращаются как NA. Миллисекунды всегда .61, не имеет значения, какая остальная часть даты. Я делаю эти даты.

Я попытался изолировать эти файлы, а затем снова объединить два кадра данных, но это не работает. Все мои даты - внезапно.

Любые мысли?

Пример

vec <- c("20150101.010101.60", "20150101.010101.61", "20150101.010101.62") 
as.POSIXlt(vec, tz="EST", format="%Y%m%d.%H%M%S.%OS") 
#[1] "2015-01-01 01:01:60 EST" NA "2015-01-01 01:01:01 EST" 
+1

это выглядит как ваша строка формата просто неправильно (как указано в @ nrussell отвечают), а просто из любознательности я хотел бы знать, что на самом деле продолжая запускать это конкретное неопределенное поведение. Я слишком ленив, чтобы проследить через лежащий в основе C-код, хотя ... –

ответ

3

Если изменить формат времени части, чтобы быть %H%M%OS вместо %H%M%S.%OS, кажется, правильно разобрать. Вы, возможно, придется настроить options так увидеть это:

as.POSIXlt(vec, tz = "EST", format = "%Y%m%d.%H%M%OS") 
#[1] "2015-01-01 01:01:01 EST" "2015-01-01 01:01:01 EST" 
#[3] "2015-01-01 01:01:01 EST" 

options(digits.secs = 2) 
as.POSIXlt(vec, tz = "EST", format = "%Y%m%d.%H%M%OS") 
# [1] "2015-01-01 01:01:01.60 EST" "2015-01-01 01:01:01.61 EST" 
# [3] "2015-01-01 01:01:01.62 EST" 
+0

Я подмножал те, которые приводят к «NA», преобразовывая эти строки символов в временные метки с% H% M% S, а затем вручную добавляя 0,61. Я даже не думал настраивать параметры. Я проверю это, спасибо! – etgriffiths

+0

Обновление: Я отвлекся на другие аспекты этого проекта, но предложенная опция (digits.secs = 2) не решила эту проблему. 61 миллисекунды все еще торчат. Как ни странно, это может быть 610 миллисекунд, и из того, что я могу сказать, код работает правильно. Странный сбой в коде. Всем спасибо! У меня есть длинный круглый способ добавления их в сообщение, и это работает пока. – etgriffiths

 Смежные вопросы

  • Нет связанных вопросов^_^