#python #r #dataframe
Вопрос:
Как я могу рассчитать каждый возможный временной диапазон за определенный период, используя R?
Пример
Период времени: 2021-01-01 — 2021-06-30
дата начала | дата окончания |
---|---|
2021-01-01 | 2021-01-01 |
2021-01-01 | 2021-01-02 |
2021-01-01 | 2021-01-03 |
2021-01-01 | 2021-01-04 |
… | … |
2021-01-02 | 2021-01-02 |
2021-01-01 | 2021-01-03 |
2021-01-01 | 2021-01-04 |
2021-01-01 | 2021-01-05 |
… | … |
Условие: Дата начала всегда должна быть до или равна дате окончания
Есть какие-нибудь идеи?
Всего наилучшего, Янник
Комментарии:
1. Есть ли причина, по которой вы помечены
python
?2. будет ли для вас приемлемым ответ на python?
Ответ №1:
start = as.Date("2021-01-01")
end = as.Date("2021-06-30")
## get all the dates in the range
seq = seq(start, end, by = "day")
## produce all unique combinations of 2 dates
pairs = t(combn(seq, 2))
## verify they are already correctly ordered
all(pairs[, 1] < pairs[, 2])
# [1] TRUE
## put them in a data frame and convert back to date
## (the `combn` step produced a matrix and lost the Date class...)
pairs = as.data.frame(pairs)
pairs[] = lapply(pairs, as.Date, origin = "1970-01-01")
names(pairs) = c("start", "end")
## examine the first few rows
head(pairs)
# start end
# 1 2021-01-01 2021-01-02
# 2 2021-01-01 2021-01-03
# 3 2021-01-01 2021-01-04
# 4 2021-01-01 2021-01-05
# 5 2021-01-01 2021-01-06
# 6 2021-01-01 2021-01-07
dim(pairs)
# [1] 16290 2
Это не включает диапазон от даты до самой себя, как в вашей первой строке. Если вы хотите, чтобы они были включены, вы можете прикрепить их в конце:
rbind(pairs, data.frame(start = seq, end = seq))