我正在寻找一种简单而正确的方法,将日期/时间(POSIXct(格式更改为从00:00:00开始的时间。
我在R语言中找不到答案,但如果我忽略了一个,请告诉我:(
所以我有这个:
日期/时间 | v1 |
---|---|
2022-02-16 15:07:15 | 38937 |
2022-02-16 15:07:17 | 39350 |
您可以计算两个日期时间之间的差异(以秒为单位(,并将i添加到从"00:00:00";,然后将其格式化为仅包括时间。请参阅下面的代表中的time
列:
library(dplyr)
ibrary(lubridate)
df %>%
mutate(
date = lubridate::ymd_hms(date),
seconds = as.numeric(date - first(date)),
time = format(
lubridate::ymd_hms("2022-01-01 00:00:00") + seconds,
format = "%H:%M:%S"
)
)
#> # A tibble: 2 × 4
#> date v1 seconds time
#> <dttm> <dbl> <dbl> <chr>
#> 1 2022-02-16 15:07:15 38937 0 00:00:00
#> 2 2022-02-16 15:07:17 39350 2 00:00:02
创建于2022-03-30由reprex包(v2.0.1(
请注意,如果您的两个约会时间间隔超过24小时,这将产生误导。在这种情况下,您可能应该包括日期。
数据
df <- tibble::tribble(
~date, ~v1,
"2022-02-16 15:07:15", 38937,
"2022-02-16 15:07:17", 39350
)
您可以用date/time
的第一条记录扣除所有date/time
,并通过hms
包中的hms()
函数将结果更改为time
类型。
library(dplyr)
library(hms)
df %>%
mutate(`date/time` = hms::hms(as.numeric(as.POSIXct(`date/time`) - as.POSIXct(first(`date/time`)))))
date/time v1
1 00:00:00 38937
2 00:00:02 39350
注意,在这种方法中,即使时差大于1天,它也会反映在结果中,例如:
df <- read.table(header = T, check.names = F, sep = "t", text = "
date/time v1
2022-02-16 15:07:15 38937
2022-02-18 15:07:17 39350")
df %>%
mutate(`date/time` = hms::hms(as.numeric(as.POSIXct(`date/time`) - as.POSIXct(first(`date/time`)))))
date/time v1
1 00:00:00 38937
2 48:00:02 39350