Я новичок в R и у меня есть кадр данных с датой времени как переменная. За каждый час регистрируется температура каждого дня, а время даты - в формате ГГГГ-ММ-ДД 00:00:00. Теперь я хотел бы преобразовать время в коэффициент от 0 до 23 каждый день. Итак, для каждого дня моя новая колонка должна иметь факторы от 0 до 23. Может ли кто-нибудь помочь мне с этим? Мой 2015-01-01 00:00:00, должен дать мне 0, а 2015-01-01 01:00:00, должен дать мне 1 и так далее. Также мой 2015-01-02 00:00:00 должен быть снова 0.R Преобразование даты времени
ответ
Используя пример данных, одним из способов было бы следующее.
mydf <- data.frame(id = c(1,1,1,2,2,1,1),
event = c("start", "valid", "end", "start", "bad", "start", "bad"),
time = as.POSIXct(c("2015-05-16 20:46:53", "2015-05-16 20:46:56", "2015-05-16 21:46:59",
"2015-05-16 22:46:53", "2015-05-16 22:47:00", "2015-05-16 22:49:05",
"2015-05-16 23:49:09"), format = "%Y-%m-%d %H:%M:%S"),
stringsAsFactors = FALSE)
library(dplyr)
mutate(mydf, group = factor(format(time, "%H")))
# id event time group
#1 1 start 2015-05-16 20:46:53 20
#2 1 valid 2015-05-16 20:46:56 20
#3 1 end 2015-05-16 21:46:59 21
#4 2 start 2015-05-16 22:46:53 22
#5 2 bad 2015-05-16 22:47:00 22
#6 1 start 2015-05-16 22:49:05 22
#7 1 bad 2015-05-16 23:49:09 23
Вы можете преобразовать метку в объект POSIXlt
. Как только у вас есть это, вы можете получить этот час прямо следующим образом:
> timestamp <- as.POSIXlt("2015-01-01 00:00:00")
> timestamp
[1] "2015-01-01 MYT"
> timestamp$hour
[1] 0
ответ Тима, используя POSIXlt
, вероятно, лучший вариант, но вот регулярное выражение способ только в случае, если:
> times <- c("2015-01-01 00:00:00", "2015-01-01 01:00:00", "2015-01-02 00:00:00")
> regmatches(times, regexpr("(?<=-\\d{2})\\d{2}", times, perl=TRUE))
[1] "00" "01" "00"
С добытых часов вы можете сделать их факторы или целые числа по мере необходимости.
Очень хорошая альтернатива! –
Регулярное задание для этой задачи - час всегда одного и того же двух символов, поэтому используйте подстроку - 'substr (times, 12,13)' – thelatemail
@Sairam, в дополнение к использованию jazzurro 'dplyr' (которое, как и jazzurro, многие R-insitas обычно используют) ... в будущем, если вам нужен или нужен простой & мощный способ манипулирования датами , вам рекомендуется ознакомиться с другим пакетом: «lubridate».
lubridate работает с датами. Надеюсь, что это поможет и с наилучшими пожеланиями в вашем проекте.
Зачем загружать 'dplyr' для добавления одной переменной? – thelatemail
@thelatemail Вам не обязательно. По умолчанию у меня есть 'dplyr', работающий на моей машине и использующий его. :) – jazzurro
@SairamReddy Мое удовольствие. Я рад, что это вам помогло. :) – jazzurro