Windows下R的cut()处理datetime丢失时间戳,Ubuntu正常求助
R中
cut()函数跨Windows/Ubuntu平台的时间格式化不一致问题 我有一个依赖时间分箱切割datetime的R函数,在Windows与Ubuntu平台表现不一致,以下是可复现的示例:
datetimes <- seq(from = as.POSIXct("2023-01-02 23:00:00", tz = "UTC"), to = as.POSIXct("2023-01-03 01:00:00", tz = "UTC"), by = "30 min") # 应用cut函数 cut_times <- cut(datetimes, breaks = "1 hour") # 转为数据框方便查看 df <- data.frame(original_times = datetimes, cut_times = cut_times) # 打印数据框 print(df)
Windows平台输出:
original_times cut_times 1 2023-01-02 23:00:00 2023-01-02 23:00:00 2 2023-01-02 23:30:00 2023-01-02 23:00:00 3 2023-01-03 00:00:00 2023-01-03 4 2023-01-03 00:30:00 2023-01-03 5 2023-01-03 01:00:00 2023-01-03 01:00:00
可以看到Windows中部分cut结果丢失了时间戳(如显示2023-01-03而非预期的2023-01-03 00:00:00),而Ubuntu平台的输出符合预期:
datetimes <- seq(from = as.POSIXct("2023-01-02 23:00:00", tz = "UTC"), to = as.POSIXct("2023-01-03 01:00:00", tz = "UTC"), by = "30 min") # 应用cut函数 cut_times <- cut(datetimes, breaks = "1 hour") # 转为数据框方便查看 df <- data.frame(original_times = datetimes, cut_times = cut_times) # 打印数据框 print(df)
Ubuntu平台输出:
original_times cut_times 1 2023-01-02 23:00:00 2023-01-02 23:00:00 2 2023-01-02 23:30:00 2023-01-02 23:00:00 3 2023-01-03 00:00:00 2023-01-03 00:00:00 4 2023-01-03 00:30:00 2023-01-03 00:00:00 5 2023-01-03 01:00:00 2023-01-03 01:00:00
由于cut()会将结果转为factor,后续需通过as.POSIXct(as.character())转换回datetime类型,但Windows下该操作会丢失时间精度:
as.POSIXct(as.character(df$cut_times), tz="UTC")
Windows平台输出:
[1] "2023-01-02 UTC" "2023-01-02 UTC" "2023-01-03 UTC" "2023-01-03 UTC" [5] "2023-01-03 UTC"
平台会话信息
Windows会话信息
sessioninfo::session_info() ─ Session info ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── setting value version R version 4.3.0 (2023-04-21 ucrt) os Windows 11 x64 (build 22000) system x86_64, mingw32 ui RTerm language (EN) collate English_United States.utf8 ctype English_United States.utf8 tz America/New_York date 2023-07-19 pandoc NA ─ Packages ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── package * version date (UTC) lib source cli 3.6.1 2023-03-23 [1] CRAN (R 4.3.0) sessioninfo 1.2.2 2021-12-06 [1] CRAN (R 4.3.1) [1] C:/Users/choilab/R/R-4.3.0/library ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Ubuntu会话信息
sessioninfo::session_info() ─ Session info ─────────────────────────────────────────────────────────────── setting value version R version 4.1.2 (2021-11-01) os Ubuntu 22.04.2 LTS system x86_64, linux-gnu ui X11 language (EN) collate en_US.UTF-8 ctype en_US.UTF-8 tz America/New_York date 2023-07-19 pandoc 2.9.2.1 @ /usr/bin/pandoc ─ Packages ─────────────────────────────────────────────────────────────────── package * version date (UTC) lib source cli 3.6.1 2023-03-23 [1] CRAN (R 4.1.2) sessioninfo 1.2.2 2021-12-06 [1] CRAN (R 4.1.2) [1] /home/matias/R/x86_64-pc-linux-gnu-library/4.1 [2] /usr/local/lib/R/site-library [3] /usr/lib/R/site-library [4] /usr/lib/R/library ──────────────────────────────────────────────────────────────────────────────
内容的提问来源于stack exchange,提问作者Matias Andina
相关产品推荐
相关产品推荐

