Как конвертировать определенный формат времени в метку времени в R? [дубликат]


На этот вопрос уже есть ответ здесь:

Я работаю над набором данных" Localization Data for Person Activity Data Set " от UCI, и в этом наборе данных есть столбец даты и времени (оба в одном столбце) со следующим форматом:

27.05.2009 14:03:25:777
27.05.2009 14:03:25:183
27.05.2009 14:03:25:210
27.05.2009 14:03:25:237
...

Мне интересно, есть ли так или иначе, чтобы преобразовать это столбец в метку времени с помощью R.

1 3

1 ответ:

Прежде всего, нам нужно заменить двоеточие, отделяющее миллисекунды от секунд, на точку, иначе конечный шаг не будет работать (спасибо Dirk Eddelbuettel для этого). Поскольку в конце концов R будет использовать разделители, которые он хочет, чтобы быть быстрее, я просто пойду вперед и заменю все двоеточия точками:

x <- "27.05.2009 14:03:25:777"  # this is a simplified version of your data
y <- gsub(":", ".", x)          # this is your vector with the aforementioned substitution

Кстати, вот как должен выглядеть ваш вектор после gsub:

> y
[1] "27.05.2009 14.03.25.777"

Теперь, чтобы он показывал миллисекунды, вам сначала нужно настройте параметр R, а затем используйте функцию strptime, которая преобразует вектор даты в формат POSIXlt (удобный для R). Просто сделайте следующее:

> options(digits.secs = 3)           # this tells R you want it to consider 3 digits for seconds.
> strptime(y, "%d.%m.%Y %H:%M:%OS")  # this finally formats your vector
[1] "2009-05-27 14:03:25.777"

Я научился этому хорошему трюку здесь. этот другой ответ также говорит, что вы можете пропустить настройку options и использовать, например, strptime(y, "%d.%m.%Y %H:%M:%OS3"), но это не работает для меня. Хенрик отметил, что страница справки функции , ?strptime утверждает, что бит %OS3 зависит от операционной системы. Я использую обновленный Ubuntu 13.04 и использование %OS3 дает NA.

При использовании strptime (или других функций, связанных с POSIX, таких как as.Date), имейте в виду некоторые из наиболее распространенных используемых преобразований (отредактировано для краткости, как предложено DWin. Полный список по адресу strptime):

  • %a сокращенное название дня недели в текущей локали.
  • %A полное название дня недели в текущей локали.
  • %b сокращенное название месяца в текущей локали.
  • %B полное название месяца в текущей локации.
  • День месяца как десятичное число (01-31).
  • Часы как десятичное число (00-23). Время, например, 24:00:00 принимается для ввода.
  • Часы как десятичное число (01-12).
  • %j день года как десятичное число (001-366).
  • %m месяц как десятичное число (01-12).
  • %M минуту в формате десятичного числа (00-59).
  • %p индикатор AM / PM в локале. Используется в сочетании с %I и не с %H.
  • `%s Second как десятичное число (00-61), допускающее до двух високосных секунд (но POSIX-совместимые реализации будут игнорировать високосные секунды).
  • Неделя года как десятичное число (00-53) с использованием воскресенья в качестве первого дня 1 недели (и, как правило, с первым воскресеньем года в качестве дня 1 недели 1). Конвенция США.
  • День недели как десятичное число (0-6, воскресенье равно 0).
  • %W неделя года в виде десятичного числа (00-53) с использованием Понедельник как первый день недели (и, как правило, с первым понедельником года как День 1 недели 1). Конвенция Великобритании.
  • Год без века (00-99). На входе значения от 00 до 68 имеют префикс 20, а от 69 до 99-19
  • %Y год с веком. Обратите внимание, что, хотя в первоначальном григорианском календаре не было нуля, ISO 8601:2004 определяет его как действительный (интерпретируется как 1BC)