嗨,我对R相当陌生,我正在考虑将字符向量转换为DateTime格式。字符矢量由年、月、日期、小时、分钟、秒组成,不带任何分隔符。我似乎不知道如何转换。我尝试使用"anytime"中的函数anytime((、anydate((,但它只保留了日期,时间丢失了。
我的数据看起来像:
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
Date1是视频的开始日期和时间,Date1是结束日期和时间。
我想要一个有4列的输出,即Cam_number、Date、Start time、End time
使用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"))