Предлагаю вам использовать тидиверс. Однако, чтобы быть совместимым с этой вселенной, вы сначала должны сделать ваши данные стандартными, ie аккуратными. В вашем примере все было бы проще, если бы вы преобразовали свои данные, чтобы ваши наблюдения упорядочивались по строкам, а столбцы были переменными. Если я правильно понял ваши данные, у вас есть домохозяйства, которые сажают деревья (названия строк - это даты посадки?), А затем контролируют температуру. Я бы сделал что-то вроде:
-----------------------------------------------------------------------------
| Household ID | planting date | Date of control | Temperature controlled |
-----------------------------------------------------------------------------
во-первых, сохраните дату посадки как другое имя, а не имя, например:
library(dplyr)
df <- tibble::rownames_to_column(data, "PlantingDate")
Вы также должны получить свой домашний идентификатор var, который вы нам не указали. Затем вы можете управлять аккуратными данными с помощью tidyr, используя
library(tidyr)
df <- gather(df,"DateOfControl","Temperature",-c(PlantingDate,ID))
Когда у вас это будет, вы сможете использовать пакет lubridate, что-то вроде
library(lubridate)
df %>%
group_by(ID,PlantingDate,year(ControlDate),month(ControlDate)) %>%
summarise(MeanT=mean(Temperature))
может работать