Отформатируйте вывод as.period () из lubridate - PullRequest
0 голосов
/ 15 мая 2019

У меня в настоящее время есть объект точки с этим значением:

"35d 17H 15M 28.9999999995343S"

Я бы хотел получить другой вывод:

35 days 17 hours 15 minutes 28 seconds

Я также хотел бы иметь возможность отформатировать его так, чтобы единицы принимали "s" или нет, в зависимости от того, являются ли единицы времени> 1 или нет.

Я уже пытался получить атрибуты объекта с помощью attr(period_object, "unit"), но я не могу изменить секунд , так как кажется, что их нет в объекте.

str(as.period(period_object))
Formal class 'Period' [package "lubridate"] with 6 slots
  ..@ .Data : num 29
  ..@ year  : num 0
  ..@ month : num 0
  ..@ day   : num 35
  ..@ hour  : num 17
  ..@ minute: num 15

Вот пример данных:

library(lubridate)
time1 <- as.POSIXct("2019-01-01 15:12:07")
time2 <- as.POSIXct("2019-02-06 08:27:36")
period_object <- difftime(time2, time1)

as.period(period_object)
[1] "35d 17H 15M 28.9999999995343S"

Итак, окончательный вывод, который я хочу получить: 35 days 17 hours 15 minutes 28 seconds

У кого-нибудь есть подсказки? Спасибо.

1 Ответ

1 голос
/ 15 мая 2019

Один путь к секундам:

period_object %/% dseconds(1) %% 60
#[1] 28

Чтобы получить их все так:

days    <- period_object %/% ddays(1)
hours   <- period_object %/% dhours(1) %% 24
minutes <- period_object %/% dminutes(1) %% 60
seconds <- period_object %/% dseconds(1) %% 60
...