将字符矢量转换为POSIXct格式

  • 本文关键字:POSIXct 格式 转换 字符 r
  • 更新时间 :
  • 英文 :


嗨,我对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.POSIXctformat

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"))

最新更新