Вы можете проверить, равен ли ID
поднабором с -1
и -nrow(gap)
, а также рассчитать gap_time
с этим.
gap$gap_time <- gap$start.day - c(NA, gap$end.day[-nrow(gap)])
gap$timemark <- c(FALSE, gap$ID[-1] == gap$ID[-nrow(gap)])
gap$gap_time[!gap$timemark] <- NA
# ID start.day end.day gap_time timemark
#1 A 147 158 NA FALSE
#2 A 194 210 36 TRUE
#3 B 2 87 NA FALSE
#4 B 98 283 11 TRUE
#5 C 313 317 NA FALSE
#6 D 32 87 NA FALSE
В случае, если gap$ID
является коэффициент, который вы также можете использовать:
gap$gap_time <- c(NA, gap$start.day[-1] - gap$end.day[-nrow(gap)])
gap$timemark <- c(0,diff(unclass(gap$ID)))
gap$gap_time[gap$timemark==0] <- NA
Или вы можете использовать ave
:
gap$gap_time <- ave(gap$start.day - c(NA, gap$end.day[-nrow(gap)]), gap$ID
, FUN=function(x) "[<-"(x,1,NA))