我无法理解这种计算的本质。假设我有一个日期向量:
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")
答案 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"