如何在没有AM或PM信息的情况下将12小时转换为24小时?

问题描述 投票:0回答:1

我从流数据记录器接收到的数据,但是时间以12小时制记录,没有关于AM或PM的信息。我可以通过查看时间的顺序来推断时间是上午还是下午,但是我需要将它们转换为24小时制。

我还有其他使用24小时制的记录器数据,因此我需要确保它们匹配。我使用了as.POSIXct()来格式化所有其他数据,但是这个特定的集存在问题。

我正在使用R进行此分析。

这是数据的样子:

          Date_Time    PT.Level
2008-11-21 11:40:00      0.7502
2008-11-21 11:45:00      0.7502
2008-11-21 11:50:00      0.7480
2008-11-21 11:55:00      0.7458
2008-11-22 12:00:00      0.7458
2008-11-22 12:05:00      0.7436
2008-11-22 12:05:42          NA
2008-11-22 12:10:00      0.7436
2008-11-22 12:15:00      0.7414
#             [...]       [...]
2008-11-22 11:45:00      0.7304
2008-11-22 11:50:00      0.7304
2008-11-22 11:55:00      0.7304
2008-11-22 12:00:00      0.7282
2008-11-22 12:00:43          NA
2008-11-22 12:05:00      0.7282
2008-11-22 12:10:00      0.7282
2008-11-22 12:15:00      0.7282

有什么建议吗?

r time posixct
1个回答
0
投票

使用ave

v[1]
# [1] "2020-05-22 22:00:00 CEST"
v1 <- format(v, "%Y-%m-%d %I:%M")
v1[1]
# [1] "2020-05-22 10:00"

v2 <- ave(as.numeric(substr(v1, 12, 13)) %% 12 + 1 == 1, as.Date(v1), FUN=function(x) {
  if (length(table(x)) == 1) 2
  else cumsum(x)
})
v2 <- c("AM", "PM")[v2]

结果

cbind.data.frame(v, v1, v2)

#                      v               v1 v2
# 1  2020-05-22 22:00:00 2020-05-22 10:00 PM
# 2  2020-05-22 23:00:00 2020-05-22 11:00 PM
# 3  2020-05-23 00:00:00 2020-05-23 12:00 AM
# 4  2020-05-23 01:00:00 2020-05-23 01:00 AM
# 5  2020-05-23 02:00:00 2020-05-23 02:00 AM
# 6  2020-05-23 03:00:00 2020-05-23 03:00 AM
# 7  2020-05-23 04:00:00 2020-05-23 04:00 AM
# 8  2020-05-23 05:00:00 2020-05-23 05:00 AM
# 9  2020-05-23 06:00:00 2020-05-23 06:00 AM
# 10 2020-05-23 07:00:00 2020-05-23 07:00 AM
# 11 2020-05-23 08:00:00 2020-05-23 08:00 AM
# 12 2020-05-23 09:00:00 2020-05-23 09:00 AM
# 13 2020-05-23 10:00:00 2020-05-23 10:00 AM
# 14 2020-05-23 11:00:00 2020-05-23 11:00 AM
# 15 2020-05-23 12:00:00 2020-05-23 12:00 PM
# 16 2020-05-23 13:00:00 2020-05-23 01:00 PM
# 17 2020-05-23 14:00:00 2020-05-23 02:00 PM
# 18 2020-05-23 15:00:00 2020-05-23 03:00 PM
# 19 2020-05-23 16:00:00 2020-05-23 04:00 PM
# 20 2020-05-23 17:00:00 2020-05-23 05:00 PM
# 21 2020-05-23 18:00:00 2020-05-23 06:00 PM
# 22 2020-05-23 19:00:00 2020-05-23 07:00 PM
# 23 2020-05-23 20:00:00 2020-05-23 08:00 PM
# 24 2020-05-23 21:00:00 2020-05-23 09:00 PM
# 25 2020-05-23 22:00:00 2020-05-23 10:00 PM
# 26 2020-05-23 23:00:00 2020-05-23 11:00 PM
# 27 2020-05-24 00:00:00 2020-05-24 12:00 AM
# 28 2020-05-24 01:00:00 2020-05-24 01:00 AM
# 29 2020-05-24 02:00:00 2020-05-24 02:00 AM
# 30 2020-05-24 03:00:00 2020-05-24 03:00 AM
# 31 2020-05-24 04:00:00 2020-05-24 04:00 AM
# 32 2020-05-24 05:00:00 2020-05-24 05:00 AM
# 33 2020-05-24 06:00:00 2020-05-24 06:00 AM
# 34 2020-05-24 07:00:00 2020-05-24 07:00 AM
# 35 2020-05-24 08:00:00 2020-05-24 08:00 AM
# 36 2020-05-24 09:00:00 2020-05-24 09:00 AM
# 37 2020-05-24 10:00:00 2020-05-24 10:00 AM
# 38 2020-05-24 11:00:00 2020-05-24 11:00 AM
# 39 2020-05-24 12:00:00 2020-05-24 12:00 PM
# 40 2020-05-24 13:00:00 2020-05-24 01:00 PM
# 41 2020-05-24 14:00:00 2020-05-24 02:00 PM
# 42 2020-05-24 15:00:00 2020-05-24 03:00 PM
# 43 2020-05-24 16:00:00 2020-05-24 04:00 PM
# 44 2020-05-24 17:00:00 2020-05-24 05:00 PM
# 45 2020-05-24 18:00:00 2020-05-24 06:00 PM
# 46 2020-05-24 19:00:00 2020-05-24 07:00 PM
# 47 2020-05-24 20:00:00 2020-05-24 08:00 PM
# 48 2020-05-24 21:00:00 2020-05-24 09:00 PM

数据:

v <- as.POSIXct(sapply(1:48, function(x) 1590174000 + x*60*60),
           origin="1970-01-01")
© www.soinside.com 2019 - 2024. All rights reserved.