Преобразование дат, минут и секунд в формат ISOdatetime в R

#r #date

#r #Дата

Вопрос:

У меня есть фрейм данных, который похож на dd where

 dd = data.frame(date = as.Date(c("2014-04-29", "2014-04-29","2014-04-29", "2014-04-29", "2014-04-29", "2014-04-29"), format ="%Y-%m-%d"), hh = 1:6, mm = seq(0, 50, 10))
 

Я хочу создать новые переменные, вызвать их time1 и time2 , где

  • time1 время суток, независимо от даты, например: в строке 1 time1 = 01:00 [чч: мм] нет записи для секунд
  • time2 is date time1 ; например , для строки 1 time2 = 2014-04-29 : 01:00

Любое предложение приветствуется!

Комментарии:

1. База R не имеет типа данных только для времени (только дата время). Вы можете либо сохранить его в виде строки, либо установить значение контрольной даты для объединения со временем. При желании вы можете использовать какую-либо другую библиотеку, которая может иметь такой тип данных.

2. Пакет chron имеет times класс.

Ответ №1:

Проверьте lubridate пакет:

 library(lubridate)
dd$time1 <- with(dd, hm(paste(hh, mm, sep=":")))
dd$time2 <- with(dd, ymd(dd$date)   time1)
 

Ответ №2:

Использование базового R

 dd$time1 <- format(strptime(paste0(dd$hh, ":", dd$mm), "%H:%M"), "%H:%M")
dd$time2 <- format(strptime(paste0(dd$date, ":", dd$hh, ":", dd$mm), "%Y-%m-%d:%H:%M"), "%Y-%m-%d : %H:%M")
 

Что приведет к

 dd$time1
## [1] "01:00" "02:10" "03:20" "04:30" "05:40" "06:50"
dd$time2
## [1] "2014-04-29 : 01:00" "2014-04-29 : 02:10" "2014-04-29 : 03:20" "2014-04-29 : 04:30"
##v[5] "2014-04-29 : 05:40" "2014-04-29 : 06:50"
 

Однако они не будут Date вводиться (см. Комментарий @MrFlick)