Преобразовать вектор символов в формат POSIXct - PullRequest
0 голосов
/ 03 марта 2020

Привет, я довольно новичок в R и собираюсь преобразовать символьный вектор в формат DateTime. Вектор символов состоит из года, месяца, даты, часов, минут, секунд без разделителей. Я не могу понять, как сделать преобразование. Я пытался использовать функцию anytime (), anydate () из «anytime», но она сохраняет только дату и время теряется.

Мои данные выглядят так:

head(d)
  Cam_number          Date1          Date2
1   Camera01 20190913235959 20190914000115
2   Camera02 20190913235959 20190914000115
3   Camera01 20190914000248 20190914000115
4   Camera02 20190914000248 20190914000115
5   Camera01 20190914000309 20190914000115
6   Camera02 20190914000309 20190914000115

Дата1 - это дата и время начала видео, а Дата1 - это дата и время.

Я хочу получить вывод который будет иметь 4 столбца, ie, номер_камера, дата, время начала, время окончания

1 Ответ

1 голос
/ 03 марта 2020

Использование as.POSIXct и format.

res <- `colnames<-`(cbind(dat[1], mapply(function(x, y) 
  format(as.POSIXct(x, format="%Y%m%d%H%M%S"), format=y), dat[c(2, 2, 3)], 
  c("%Y-%m-%d", rep("%H:%M:%S", 2)))), 
  c("Cam_number", "Date", "Start time", "End time"))
res
#   Cam_number       Date Start time End time
# 1   Camera01 2019-09-13   23:59:59 00:01:15
# 2   Camera02 2019-09-13   23:59:59 00:01:15
# 3   Camera01 2019-09-14   00:02:48 00:01:15
# 4   Camera02 2019-09-14   00:02:48 00:01:15
# 5   Camera01 2019-09-14   00:03:09 00:01:15
# 6   Camera02 2019-09-14   00:03:09 00:01:15

Однако, то, что вы хотите, не в формате POSIXct. Вместо этого вы можете рассмотреть:

res2 <- cbind(dat[1], 
              setNames(data.frame(lapply(dat[-1], as.POSIXct, format="%Y%m%d%H%M%S")),
                       c("Start time", "End time")))
res2
#   Cam_number               Date1               Date2
# 1   Camera01 2019-09-13 23:59:59 2019-09-14 00:01:15
# 2   Camera02 2019-09-13 23:59:59 2019-09-14 00:01:15
# 3   Camera01 2019-09-14 00:02:48 2019-09-14 00:01:15
# 4   Camera02 2019-09-14 00:02:48 2019-09-14 00:01:15
# 5   Camera01 2019-09-14 00:03:09 2019-09-14 00:01:15
# 6   Camera02 2019-09-14 00:03:09 2019-09-14 00:01:15

, где

lapply(res2, class)
# $Cam_number
# [1] "character"
# 
# $Date1
# [1] "POSIXct" "POSIXt" 
# 
# $Date2
# [1] "POSIXct" "POSIXt"

Данные:

dat <- structure(list(Cam_number = c("Camera01", "Camera02", "Camera01", 
"Camera02", "Camera01", "Camera02"), Date1 = c("20190913235959", 
"20190913235959", "20190914000248", "20190914000248", "20190914000309", 
"20190914000309"), Date2 = c("20190914000115", "20190914000115", 
"20190914000115", "20190914000115", "20190914000115", "20190914000115"
)), class = "data.frame", row.names = c("1", "2", "3", "4", "5", 
"6"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...