r - R:将R中的日期格式从同一天的01:00更改为24:00
问题描述
使用“POSIXct”函数,我获得了同一天从 00:00 H 到 23:00 H 的日期格式,但是我需要在同一天获得从 01:00 H 到 24:00 H 的格式。有没有其他方法可以获得这种格式?
[1] "2016-01-01 01:00:00 -05" "2016-01-01 02:00:00 -05" "2016-01-01 03:00:00 -05" [4] "2016-01-01 04:00:00 -05" "2016-01-01 05:00:00 -05" "2016-01-01 06:00:00 -05" [7] "2016-01-01 07:00:00 -05" "2016-01-01 08:00:00 -05" "2016-01-01 09:00:00 -05" [10] "2016-01-01 10:00:00 -05" "2016-01-01 11:00:00 -05" "2016-01-01 12:00:00 -05" [13] "2016-01-01 13:00:00 -05" "2016-01-01 14:00:00 -05" "2016-01-01 15:00:00 -05" [16] "2016-01-01 16:00:00 -05" "2016-01-01 17:00:00 -05" "2016-01-01 18:00:00 -05" [19] "2016-01-01 19:00:00 -05" "2016-01-01 20:00:00 -05" "2016-01-01 21:00:00 -05" [22] "2016-01-01 22:00:00 -05" "2016-01-01 23:00:00 -05" "2016-01-02 00:00:00 -05" [25] "2016-01-02 01:00:00 -05" "2016-01-02 02:00:00 -05" "2016-01-02 03:00:00 -05"
至
[1] "2016-01-01 01:00:00 -05" "2016-01-01 02:00:00 -05" "2016-01-01 03:00:00 -05" [4] "2016-01-01 04:00:00 -05" "2016-01-01 05:00:00 -05" "2016-01-01 06:00:00 -05" [7] "2016-01-01 07:00:00 -05" "2016-01-01 08:00:00 -05" "2016-01-01 09:00:00 -05" [10] "2016-01-01 10:00:00 -05" "2016-01-01 11:00:00 -05" "2016-01-01 12:00:00 -05" [13] "2016-01-01 13:00:00 -05" "2016-01-01 14:00:00 -05" "2016-01-01 15:00:00 -05" [16] "2016-01-01 16:00:00 -05" "2016-01-01 17:00:00 -05" "2016-01-01 18:00:00 -05" [19] "2016-01-01 19:00:00 -05" "2016-01-01 20:00:00 -05" "2016-01-01 21:00:00 -05" [22] "2016-01-01 22:00:00 -05" "2016-01-01 23:00:00 -05" "2016-01-01 24:00:00 -05" [25] "2016-01-02 01:00:00 -05" "2016-01-02 02:00:00 -05" "2016-01-02 03:00:00 -05"
解决方案
这是一个超一流的想法:
format.myPOSIX <- function(x, tz = "", usetz = FALSE, ...) {
midnight <- format.POSIXct(x, format = "%H") == "00"
dayminus1 <- x - 86400
x[midnight] <- dayminus1[midnight]
gsub(" 00:", " 24:", format.POSIXct(x, tz = tz, usetz = usetz, ...))
}
print.myPOSIX <- function(x, tz = "", usetz = TRUE, ...) {
print(format.myPOSIX(x, tz = tz, usetz = usetz, ...))
}
示范:
vec <- seq(as.POSIXct("2020-01-01 22:00:00"), as.POSIXct("2020-01-02 02:00:00"), by = "hour")
vec
# [1] "2020-01-01 22:00:00 EST" "2020-01-01 23:00:00 EST"
# [3] "2020-01-02 00:00:00 EST" "2020-01-02 01:00:00 EST"
# [5] "2020-01-02 02:00:00 EST"
class(vec) <- c("myPOSIX", class(vec))
vec
# [1] "2020-01-01 22:00:00 EST" "2020-01-01 23:00:00 EST"
# [3] "2020-01-01 24:00:00 EST" "2020-01-02 01:00:00 EST"
# [5] "2020-01-02 02:00:00 EST"
data.frame(datetime = vec)
# datetime
# 1 2020-01-01 22:00:00
# 2 2020-01-01 23:00:00
# 3 2020-01-01 24:00:00
# 4 2020-01-02 01:00:00
# 5 2020-01-02 02:00:00
tibble::tibble(datetime = vec)
# # A tibble: 5 x 1
# datetime
# <dttm>
# 1 2020-01-01 22:00:00 2020-01-01 22:00:00
# 2 2020-01-01 23:00:00 2020-01-01 23:00:00
# 3 2020-01-01 24:00:00 2020-01-01 24:00:00
# 4 2020-01-02 01:00:00 2020-01-02 01:00:00
# 5 2020-01-02 02:00:00 2020-01-02 02:00:00
推荐阅读
- masstransit - 当 T 具有 IList 类型的属性时,Roslyn 分析器使 Visual Studio 崩溃
- matlab - MATLAB randn 数组中的定向伪影?
- mysql - 查询其中一张已转置的两张表
- reactjs - 有没有办法在 React 中读取 pdf 文件的内容
- r - 循环以识别总和,然后获取该总和的位置
- java - 如何检查字符串是否有数字?
- angularjs - 使用 $http.get 在控制器中调用函数
- elasticsearch - 使用聚合的 Elasticsearch 跨索引查询
- javascript - 防止 Navlink 在悬停时突出显示
- scala - 为请求制作正文不能同时工作