Один из вариантов здесь будет использовать sqldf
, с объединением таблиц календаря и подходом агрегации:
library(sqldf)
sql <- "SELECT c.min_temp, c.max_temp, AVG(t.Temp) AS temp_avg
FROM temps c
LEFT JOIN df t ON t.Temp > c.min_temp AND t.Temp <= c.max_temp
GROUP BY c.min_temp, c.max_temp"
result <- sqldf(sql)
Данные:
# this data frame stores the temperature ranges for the averages
temps <- data.frame(min_temp=c(0, 100, 200, 300, 400, 500, 600, 700, 850, 925),
max_temp=c(100, 200, 300, 400, 500, 600, 700, 850, 925, 1000))