R: Почему strptime всегда возвращает NA, когда я пытаюсь отформатировать строку даты? - PullRequest
7 голосов
/ 14 июля 2011

Вот некоторые из моих данных, прочитанных из имен файлов AttReport_all:

Registration.Date                 Join.Time                Leave.Time
1 Jul 05, 2011 09:30 PM EDT Jul 07, 2011 01:05 PM EDT Jul 07, 2011 01:53 PM EDT
2 Jul 05, 2011 10:20 AM EDT Jul 07, 2011 01:04 PM EDT Jul 07, 2011 01:53 PM EDT
3 Jul 04, 2011 02:41 PM EDT Jul 07, 2011 12:49 PM EDT Jul 07, 2011 01:53 PM EDT
4 Jul 04, 2011 11:38 PM EDT Jul 07, 2011 12:49 PM EDT Jul 07, 2011 01:54 PM EDT
5 Jul 05, 2011 11:41 AM EDT Jul 07, 2011 12:54 PM EDT Jul 07, 2011 01:54 PM EDT
6 Jul 07, 2011 11:08 AM EDT Jul 07, 2011 01:16 PM EDT Jul 07, 2011 01:53 PM EDT

Если я сделаю strptime(AttReport_all$Registration.Date, "%b %m, %Y %H:%M %p", tz=""), я получу массив NA, где я ожидаю даты.

Sys.setlocale("LC_TIME", "C") возвращает "C"

typeof(AttReport_all$Registration.Date) возвращает "целое число"

is.factor(AttReport_all$Registration.Date) возвращает TRUE.

Чего мне не хватает?

Вот вывод версии, если это поможет: платформа i386-pc-mingw32
арка i386
os mingw32
система i386, mingw32
статус
мажор 2
несовершеннолетний 13,0
2011 год
месяц 04
день 13
svn rev 55427
язык R
version.string R версия 2.13.0 (2011-04-13)

1 Ответ

9 голосов
/ 14 июля 2011

strptime автоматически запускает as.character по первому аргументу (поэтому не имеет значения, что это фактор), и любые завершающие символы, не указанные в format=, игнорируются (поэтому «EDT» не имеет значения).

Единственными проблемами являются опечатка @Ben Bolker (%m должно быть %d) и %H должно быть %I (?strptime говорит, что вы должны не использовать %H с %p).

# %b and %m are both *month* formats
strptime("Jul 05, 2011 09:30 PM EDT", "%b %m, %Y %H:%M %p", tz="")
# [1] NA

# change %m to %d and we no longer get NA, but the time is wrong (AM, not PM)
strptime("Jul 05, 2011 09:30 PM EDT", "%b %d, %Y %H:%M %p", tz="")
# [1] "2011-07-05 09:30:00"

# use %I (not %H) with %p
strptime("Jul 05, 2011 09:30 PM EDT", "%b %d, %Y %I:%M %p", tz="")
# [1] "2011-07-05 21:30:00"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...