Я ищу способ создания цикла, который делит несколько лет на начальные и конечные разделы и дает числовые значения в процентах от года, в котором произошел разрез. Вероятно, проще всего показать вам продукт, который я хочу получить, прежде чем я опишу более подробно:
Первая итерация цикла даст мне следующий вывод для работы перед началом следующей итерации:
beginning_section = c("2003-01-01/2003-02-01","2004-01-01/2004-02-01","2005-01-01/2005-02-01")
ending_section = c("2003-02-02/2003-12-31","2004-02-02/2004-12-31","2005-02-02/2005-12-31")
time_scale = c(0.169,0.169,0.169)
Вторая итерация цикла даст мне следующий вывод для работы перед началом следующей итерации:
beginning_section = c("2003-01-01/2003-02-02","2004-01-01/2004-02-02","2005-01-01/2005-02-02")
ending_section = c("2003-02-03/2003-12-31","2004-02-03/2004-12-31","2005-02-03/2005-12-31")
time_scale = c(0.172,0.172,0.172)
Последняя итерация цикла даст мне следующий вывод для работы до завершения цикла:
beginning_section = c("2003-01-01/2003-11-30","2004-01-01/2004-11-30","2005-01-01/2005-11-30")
ending_section = c("2003-02-03/2003-12-31","2004-02-03/2004-12-31","2005-02-03/2005-12-31")
time_scale = c(0.915,0.915,0.915)
#do some calculations with beginning_section, ending section, and time scaled
По сути, он должен делить все годы в определенной точке дня месяца на два символьных вектора (один для всех начальных разделов и один для всех конечных разделов) и давать целочисленный вектор, который показывает, в каком процентном соотношении года был сделан разрез. Например, отсечение составило бы 0,5, если сокращение произошло прямо в середине года. Затем цикл должен двигаться на один день вперед и снова делать то же самое, и т. Д.
То, что я пытался (и потерпел неудачу абсолютно несчастным) до сих пор:
library(tidyverse)
days <- 1:30 %>% as.character()
months <- 2:11 %>% as.character()
years <- 2003:2017 %>% as.character()
beg_section <- NULL
end_section <- NULL
time_scaled <- NULL
for (m in months) {
for (d in days) {
for (y in years) {
temp_beg <- paste(y, "-1-1/", y, "-", m, "-", d, sep = "")
beg_section <- rbind(beg_section,temp_beg)
temp_end <- paste(y, "-", m, "-", d, "/", y, "-12-31", sep = "")
end_section <- rbind(end_section,temp_end)
temp_scale <- (as.numeric(m) + as.numeric(d)/30 - 1) / 12
time_scaled <- rbind(time_scaled,temp_scale)
}
}
}
beg_section <- beg_section %>% as.vector()
end_section <- end_section %>% as.vector()
time_scaled <- time_scaled %>% as.vector()
n <- 1
m <- length(years) %>% as.numeric()
while (m < length(beg_section)) {
lead_up_period <- beg_section[n:m]
end_period <- end_section[n:m]
vol_adjustment <- time_scaled[n]
print(lead_up_period)
print(end_period)
print(vol_adjustment)
n <- m + 1
m <- m + length(years)
}
#end
Я также хотел бы отметить, что решение не должно быть абсолютно идеальным. Если, например, все месяцы будут иметь дело только с 30 днями, это уже очень ценится.