在 R 中从 HMS 转换为小时:分钟,或从 HMS 转换为分钟四舍五入



我有一列hms,但我想将这些时间仅绘制为分钟,因为我正在显示带有出现的直方图。

问题是:我在1min 10sec上发生了 10 个事件,1min 47sec发生了 3 个事件,但我想将它们全部绘制在 1 分钟以内。

我正在绘制提前期,所以我只想显示分钟。

我希望我的解释足够清楚,如果没有我可以写更多

如果我正确理解您的问题,您可以使用这样的基本 R 函数解决您的问题

library(hms)
test_time <- as.hms(c("10:01:10", "11:01:47",
    "12:34:56", "15:01:47", "16:01:23", "18:01:47"))
as.numeric(format(as.POSIXlt(test_time), "%M"))

或者像这样

as.POSIXlt(paste(Sys.Date(), test_time))$min

另一个选项是lubridate包中的minutes()功能:

library(lubridate)
minute(test_time)

如果您更喜欢使用 dplyr ,请尝试此方法:

library(hms)
library(dplyr)
c("10:01:10", "11:01:47", "12:34:56", "15:01:47", "16:01:23", "18:01:47") %>% 
    as_hms() %>% 
    as.POSIXlt() %>% 
    format("%H:%M") %>% 
    paste0(., ":00") %>% 
    as_hms()

其中返回:

[1] 10:01:00
[2] 11:01:00
[3] 12:34:00
[4] 15:01:00
[5] 16:01:00
[6] 18:01:00

此过程只是剥离seconds值,并将其替换为00值。这应该达到您正在寻找的结果。

但是,如果包含日期,则可以使用 lubridateround_date()函数:

library(lubridate)
c("2020-08-08 10:01:10", "2020-08-08 11:01:47", "2020-08-08 12:34:56", "2020-08-08 15:01:47", "2020-08-08 16:01:23", "2020-08-08 18:01:47") %>% 
    ymd_hms() %>% 
    round_date("minute")

其中返回:

[1] "2020-08-08 10:01:00 UTC"
[2] "2020-08-08 11:02:00 UTC"
[3] "2020-08-08 12:35:00 UTC"
[4] "2020-08-08 15:02:00 UTC"
[5] "2020-08-08 16:01:00 UTC"
[6] "2020-08-08 18:02:00 UTC"

最新更新