我有一列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
值。这应该达到您正在寻找的结果。
但是,如果包含日期,则可以使用 lubridate
的round_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"