R中的日期差给出数值

时间:2018-12-24 18:41:39

标签: r

我无法理解这种计算的本质。假设我有一个日期向量:

library(lubridate)
dates <- c("2018-12-23 00:02:00", "2018-12-24 00:00:00", "2018-12-25 00:04:00")

我想从每个日期中减去10秒。如果我使用任何apply函数,则会得到数字输出,但是如果这样做:

ymd_hms(dates[1]) - ms('0,10')
"2018-12-23 00:01:50"

我得到正确的答案。如何获得以下输出:

c("2018-12-23 00:01:50", "2018-12-23 23:59:50", "2018-12-25 00:03:50")

4 个答案:

答案 0 :(得分:4)

您可以转换为POSIXct并减去10

dates <- c("2018-12-23 00:02:00", "2018-12-24 00:00:00", "2018-12-25 00:04:00")
as.character(as.POSIXct(dates) - 10)
# [1] "2018-12-23 00:01:50" "2018-12-23 23:59:50" "2018-12-25 00:03:50"

来自?DateTimeClasses

  

“ POSIXct”类表示自1970年初以来(在UTC时区)的秒(有符号)秒数,作为数字矢量。


如果您不希望最后输入字符,那么只需

as.POSIXct(dates) - 10

@thelatemail指出,我们也可以这样做

as.POSIXct(dates) - as.difftime(10, units="secs")

可能的单位是:"auto", "secs", "mins", "hours", "days", "weeks",请参阅?difftime

答案 1 :(得分:3)

您的dates分配需要逗号...您可以跳过*apply()方法:

library(lubridate)

dates <- ymd_hms(
    c("2018-12-23 00:02:00", "2018-12-24 00:00:00", "2018-12-25 00:04:00")
)

dates - ms("0, 10")

#> [1] "2018-12-23 00:01:50 UTC" "2018-12-23 23:59:50 UTC"
#> [3] "2018-12-25 00:03:50 UTC"

答案 2 :(得分:2)

您可以使用seconds函数。

library(lubridate)

dates <- c("2018-12-23 00:02:00", "2018-12-24 00:00:00", "2018-12-25 00:04:00")

ymd_hms(dates) - seconds(10)
#[1] "2018-12-23 00:01:50 UTC" "2018-12-23 23:59:50 UTC"
#[3] "2018-12-25 00:03:50 UTC"

如果要从dates中减去几个可能不同的值,则必须将向量传递给seconds

ymd_hms(dates) - seconds(c(5, 10, 15))
#[1] "2018-12-23 00:01:55 UTC" "2018-12-23 23:59:50 UTC"
#[3] "2018-12-25 00:03:45 UTC"

答案 3 :(得分:2)

基本R

strptime(dates, "%Y-%m-%d %H:%M:%S")-10
[1] "2018-12-23 00:01:50 EST" "2018-12-23 23:59:50 EST" "2018-12-25 00:03:50 EST"