Разница дат в R дает числовое значение - PullRequest
0 голосов
/ 24 декабря 2018

Я не могу понять природу этого вычисления.Допустим, у меня есть вектор дат:

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

Я хотел бы вычесть 10 секунд из каждой из этих дат.Я получаю числовой вывод, если я использую любую функцию применения, однако, если я делаю это:

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 голосов
/ 24 декабря 2018

База 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"
0 голосов
/ 24 декабря 2018

Ваше 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"
0 голосов
/ 24 декабря 2018

Вы можете использовать функцию 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"
0 голосов
/ 24 декабря 2018

Вы можете преобразовать в 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...