Это работает, но кажется немного не элегантным. Сначала создайте вектор, представляющий собой последовательность времен между каждым временем начала и окончания по минутам:
tmp <- do.call(c, apply(ep, 1,
function(x) head(seq(from = as.POSIXct(x[1]),
to = as.POSIXct(x[2]),by = "mins"),
-1)))
Мы используем head(...., -1)
для удаления последней минуты из каждой последовательности, чтобы минуты соответствовали желаемому.
Затем разделите этот вектор на минуты, приходящиеся на отдельные дни, и посчитайте, сколько минут в день:
tmp <- sapply(split(tmp, format(tmp, format = "%Y-%m-%d")), length)
Обратите внимание, что по какой-то причине (возможно, связанной с часовым поясом), которую мы не можем просто использовать as.Date(tmp)
, чтобы получить вектор дат, нам нужно явно отформатировать время, чтобы показать только части даты.
Последний шаг - упорядочить объект tmp
, содержащий все, что нам нужно, в запрошенный вами формат:
mins <- data.frame(Date = names(tmp), Minutes = tmp, row.names = NULL)
Это дает:
> mins
Date Minutes
1 2009-07-13 15
2 2009-07-14 3
3 2009-08-14 930
4 2009-08-15 515
5 2009-09-16 510
6 2009-09-17 1440
7 2009-09-18 1440
8 2009-09-19 450