Я имею дело с огромным набором данных (годы наблюдений за использованием энергии с интервалом в 1 минуту).Я хочу преобразовать его из 1-минутного интервала в 15-минутный.
Я написал цикл for, который делает это успешно (проверено на небольшом подмножестве данных);однако, когда я попытался запустить его на основных данных, он выполнялся очень медленно - и мне потребовалось бы более 175 часов, чтобы выполнить полный цикл (я остановил его в середине выполнения).
Данные, которые будут преобразованы в 15-минутный интервал, - это использование кВтч;таким образом, для его преобразования просто требуется взять среднее из первых 15-ых наблюдений, затем второго 15-го и т. д. Вот этот цикл работает:
# Opening the file
data <- read.csv("1.csv",colClasses="character",na.strings="?")
# Adding an index to each row
total <- nrow(data)
data$obsnum <- seq.int(nrow(data))
# Calculating 15 min kwH usage
data$use_15_min <- data$use
for (i in 1:total) {
int_used <- floor((i-1)/15)
obsNum <- 15*int_used
sum <- 0
for (j in 1:15) {
usedIndex <- as.numeric(obsNum+j)
sum <- as.numeric(data$use[usedIndex]) + sum
}
data$use_15_min[i] <- sum/15
}
Я искал функцию, которая может сделать то же самое,но без использования петель, как я полагаю, это должно сэкономить много времени.Тем не менее, я не смог найти один.Как можно достичь той же функциональности без использования цикла?