Как конвертировать определенный формат времени в метку времени в R? [дубликат]
На этот вопрос уже есть ответ здесь:
- чтение csv с датами и числами 3 ответа
Я работаю над набором данных" 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 ответ:
Прежде всего, нам нужно заменить двоеточие, отделяющее миллисекунды от секунд, на точку, иначе конечный шаг не будет работать (спасибо 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)