Использование 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"))