Отредактировано на основе обновлений ОП
То, что следует, до сих пор остается в основном догадкой с моей стороны.Я исправил некоторые опечатки в вашем редакторе, чтобы получить это:
ptime <- sample(seq(as.POSIXct('2005-08-01'),as.POSIXct('2006-05-31'),
by='hour'),1051)
dawn <- sample(seq(as.POSIXct('2005-01-01'),as.POSIXct('2007-12-31'),
by='hour'),1095)
sunrise <- sample(seq(as.POSIXct('2005-01-01'),as.POSIXct('2007-12-31'),
by='hour'),1095)
sunset <- sample(seq(as.POSIXct('2005-01-01'),as.POSIXct('2007-12-31'),
by='hour'),1095)
dusk <- sample(seq(as.POSIXct('2005-01-01'),as.POSIXct('2007-12-31'),
by='hour'),1095)
# extract the date to compare using only the `dawn` vector
# all other vectors (except ptime) have the same date and length
pt <- as.Date(ptime)
dw <- as.Date(dawn)
# create data.frame
time <- c(1:1051)
test<-data.frame(time)
Вот мой дикий удар в этом:
tmp <- outer(pt, dw, "==")
tmp[upper.tri(tmp)] <- NA
tmp <- which(tmp,arr.ind = TRUE)
test$time[ tmp[ ptime[ tmp[,1] ] < dawn[ tmp[,2] ],1] ] <- 1
test$time[ tmp[ ptime[ tmp[,1] ] < sunrise[ tmp[,2] ],1 ] ] <- 2
test$time[ tmp[ ptime[ tmp[,1] ] < sunset[ tmp[,2] ],1 ] ] <- 3
test$time[ tmp[ ptime[ tmp[,1] ] < dusk[ tmp[,2] ],1] ] <- 4
Это какая-то уродливая, уродливая индексация подмножества, происходящая там.Достаточно уродливо, что я убежден, что должен быть лучший способ организовать ваши данные, чтобы избежать этого.Это также неясно, что я не уверен, что могу четко объяснить, что происходит, но я думаю это делает то, что вы описываете.