将日期/时间变量更改为r中00:00:00开始的时间



我正在寻找一种简单而正确的方法,将日期/时间(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

相关内容

  • 没有找到相关文章

最新更新