Как рассчитать количество дней между двумя датами в одном столбце R

У меня есть следующие два фрейма данных:

Date <- seq(as.Date("2013/1/1"), by = "day", length.out = 17)
x <-data.frame(Date)
x$discharge <- c("1000","1100","1200","1300","1400","1200","1300","1300","1200","1100","1200","1200","1100","1400","1200","1100","1400")
x$discharge <- as.numeric(x$discharge)

И

Date2 <- c("2013-01-01","2013-01-08","2013-01-12","2013-01-17")
y <- data.frame(Date2)
y$concentration <- c("1.5","2.5","1.5","3.5")
y$Date2 <- as.Date(y$Date2)
y$concentration <- as.numeric(y$concentration)

Я пытался рассчитать количество дней от одной даты до другой с помощью следующего кода:

y %>%
    mutate(BETWEEN0=as.numeric(difftime(Date2,lag(Date2,1))),BETWEEN=ifelse(is.na(BETWEEN0),0,BETWEEN0))%>%
    select(-BETWEEN0)

В результате чего:

Date2         concentration BETWEEN
1 2013-01-01           1.5       0
2 2013-01-08           2.5       7
3 2013-01-12           1.5       4
4 2013-01-17           3.5       5

Однако мне понадобится количество дней, рассчитанное между двумя датами, напечатанными рядом с первой датой и т. Д., Например.

Date2         concentration BETWEEN
1 2013-01-01           1.5       7
2 2013-01-08           2.5       4
3 2013-01-12           1.5       5
4 2013-01-17           3.5       0

Это означает, что с 01.01.2013 по 07.01.2013 - 7 дней, с 08.01.2013 по 12.01.2013 - 4 дня и т. Д.


person Matt    schedule 03.07.2018    source источник


Ответы (1)


y%>%mutate(Between=as.numeric(lead(Date2,default = last(Date2))-Date2))
       Date2 concentration Between
1 2013-01-01           1.5       7
2 2013-01-08           2.5       4
3 2013-01-12           1.5       5
4 2013-01-17           3.5       0


y%>%mutate(Between=as.numeric(c(diff(Date2),0)))
       Date2 concentration Between
1 2013-01-01           1.5       7
2 2013-01-08           2.5       4
3 2013-01-12           1.5       5
4 2013-01-17           3.5       0

в базе R:

 transform(y,Between=as.numeric(c(diff(Date2),0)))
person Onyambu    schedule 03.07.2018
comment
Это то, что я искал. Не могли бы вы объяснить код, если можно? - person Matt; 03.07.2018
comment
Это именно то, что вы сделали. только то, что вы делаете разницу между каждой последовательной датой @Matt2, затем вы добавляете ноль в конце ... т.е. c(diff(Date2)),0), поскольку в векторе отсутствует одно значение. Также для lead вы вычитаете текущее значение из следующего значения, а для последнего значения вы вычитаете текущее значение из текущего, поскольку следующего значения нет. - person Onyambu; 03.07.2018