Мне нужна помощь в подсчете количества дней в заданном диапазоне дат.
Вот мой набор данных:
dat<- data.frame(a=c(seq(as.Date("2018-01-01"), as.Date("2018-01-3"), 1),
seq(as.Date("2018-01-08"), as.Date("2018-01-10"), 1),
seq(as.Date("2018-01-23"), as.Date("2018-01-31"), 1),
seq(as.Date("2018-03-01"), as.Date("2018-03-05"), 1)),
b= c(rep("x",5), rep("y",5), rep("x",5), rep("y",5)) )
a b
1 2018-01-01 x
2 2018-01-02 x
3 2018-01-03 x
4 2018-01-08 x
5 2018-01-09 x
6 2018-01-10 y
7 2018-01-23 y
8 2018-01-24 y
9 2018-01-25 y
10 2018-01-26 y
11 2018-01-27 x
12 2018-01-28 x
13 2018-01-29 x
14 2018-01-30 x
15 2018-01-31 x
16 2018-03-01 y
17 2018-03-02 y
18 2018-03-03 y
19 2018-03-04 y
20 2018-03-05 y
Это отчеты, полученные с корабля, а "x" и "y" - это разные виды топлива. 01, 02 и 03 января судно сообщило, что использовало топливо типа «х». Затем 4-го, 5-го, 6-го и 7-го января корабль ничего не сообщил введите "х". Если судно изменит свой тип топлива на «y», оно отправит отчет.
Я хочу посчитать количество дней, когда тип топлива "x", и количество дней, когда тип топлива "y". Если между датами есть разрыв, например,
1 2018-01-01 x
2 2018-01-02 x
3 2018-01-03 x
4 2018-01-08 x
5 2018-01-09 x
тогда число дней между 1-й и 5-й строкой должно составлять 8 дней (с 09 января по 01 января). Таким образом, число «х» составляет 8 дней
Затем он должен вычислить следующий счетчик в столбце b, который равен "y".
6 2018-01-10 y
7 2018-01-23 y
8 2018-01-24 y
9 2018-01-25 y
10 2018-01-26 y
Здесь разница в днях составляет 16 дней (26 января-10 января). Таким образом, число "у" составляет 16 дней.
Тогда снова у нас есть «x»:
11 2018-01-27 x
12 2018-01-28 x
13 2018-01-29 x
14 2018-01-30 x
15 2018-01-31 x
Здесь число «x» равно 4 дням (31 / январь-27 / январь). Таким образом, общее количество «х» составляет (8 + 4) = 12 дней. И мы считаем аналогично «у».
16 2018-03-01 y
17 2018-03-02 y
18 2018-03-03 y
19 2018-03-04 y
20 2018-03-05 y
Вот подвох. Корабль ничего не сообщал в феврале. Поскольку в последнем отчете использовался тип топлива «x», о котором сообщалось 31 января, это означает, что весь февраль судно использовало топливо типа «x», и поэтому нам нужно добавить 28 дней февраля к «x», что делает его (8 + 4 + 28) = 40 дней
И "y" считается (16 + 4) = 21 дней
Кажется, я не понимаю, как кодировать логику.
Любая помощь будет оценена.