2014-02-05 2 views
9

Я пытаюсь извлечь время из символьной строки в R и не могу прекратить получение NA в результате. Я пробовал множество вариаций тегов регулярных выражений, но не могу обойти эту простую проблему. Любые помощь/разъяснения приветствуются.Извлечение времени из символьной строки с strptime() в R, возвращение NA

Вот мой код для примера:

> x 
[1] "2/7/2013 7:43" 
> class(x) 
[1] "character" 
> z <- strptime(x, "%H:%M") 
> z 
[1] NA 

ответ

13

R не знает, что ваша строка является DateTime. Так что это одна первая:

y <- strptime(x, format='%m/%d/%Y %H:%M') 

Если вы пытаетесь получить только дату, вы можете сделать:

strptime(x, '%m/%d/%Y') 

Потому что strptime отбрасывает любые дополнительные символы мимо вашей строки формата, но вы не можете захватить trailing %H:%M, потому что функция не знает с чего начать.

После того, как это собственный класс даты и времени, вы можете сделать что-то к нему:

strftime(y, '%H:%M') 

Я предпочитаю использовать as.POSIXlt, а не strptime и format вместо strftime ... но они примерно равны.

2

Если ваша цель - получить строку со временем, вы можете использовать регулярные выражения в sub. Если вы используете strptime в строке без информации о дате, используется сегодняшняя дата.

x <- "2/7/2013 7:43" 

x2 <- sub(".* ", "", x) 
# [1] "7:43" 

strptime(x2, "%R") 
# [1] "2014-02-05 07:43:00" 
+0

Можете ли вы объяснить мне суть трех элементов регулярного выражения в подфункции? Я довольно новичок в регулярных выражениях. Спасибо за помощь! – stokeinfo

+0

@stokeinfo Посмотрите на '? Sub'. Три аргумента: шаблон, замена, строка. Шаблон '. *' Означает: любое количество символов, за которыми следует пробел. Замена - это просто пустая строка. Функция заменяет пробел и все символы, предшествующие пробелу, пустой строкой. Следовательно, остается только строка, обозначающая время. –

+0

Или, другими словами, sub ищет шаблон и заменяет его «ничего», что эффективно удаляет дату из строки и просто оставляет время? – stokeinfo

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