У меня есть два набора данных, один содержит значения температуры за 30 лет, а второй - время ожидания размножения животных. Я пытался вычислить среднюю температуру между двумя последующими событиями размножения [Даты] для каждого человека в каждом году размножения. Я также не хочу включать в последующее событие размножения температуру в течение дня, когда разводили животное.
Формат набора данных_1:
Date Year Temp
1 1981-09-01 1981 28.77444
2 1981-09-02 1981 28.84889
3 1981-09-03 1981 29.20944
4 1981-09-04 1981 30.37500
5 1981-09-05 1981 30.32222
6 1981-09-06 1981 30.10111
Формат набора данных_2:
Year Date ID
10274 1983 1983-05-30 201
10275 1983 1983-06-12 201
10276 1983 1983-06-23 201
10277 1987 1987-06-13 201
10278 1987 1987-06-25 201
10279 1987 1987-07-05 201
Мне нужно, чтобы окончательный набор данных выглядел следующим образом:
Year Date ID Mean_Temp
10274 1983 1983-05-30 201 NA
10275 1983 1983-06-12 201 28
10276 1983 1983-06-23 201 29
10277 1987 1987-06-13 201 30
10278 1987 1987-06-25 201 28
10279 1987 1987-07-05 201 29
Где средняя температура между двумя датами в наборе данных 2 рассчитывается с использованием данных о температуре из набора данных 1.
Здесь моя попытка до сих пор:
# Split values by ID
split_inter <- split(Dataset_2, list(Dataset_2$TAGID, Dataset_2$Year)) # Split data by year
split_inter <- split_inter[sapply(split_inter, function(x) dim(x)[1]) > 0] # Remove empty datasets
output.id <- list()
for(n in names(split_inter)){
inter_framei <- split_inter[[n]]
temps <- list()
# Compute the mean temp between the dates
for (k in seq_along(inter_framei$Date)){
if (is.na(inter_framei$Date[k+1])==T) {
next; # next discontinues a particular iteration and jumps to the next cycle
} else{
temps <- Dataset_1[which(Dataset_1$Date > inter_framei$Date[k] & Dataset_1$Date <= inter_framei$Date[k+1]),]
temps$TAGID <- droplevels(unique(inter_framei$TAGID))
temps$k <- k
mean.temps <- unique(data.frame(Date=last(temps$Date),
Year=last(temps$Year),
mean.temp=mean(temps$Temp),
ID=last(temps$TAGID),
iteration=temps$k))
print(mean.temps)
output.id[[k]] <- mean.temps
}
}
}
Это печатает правильные значения, но не сохраняет их правильно в списке. Есть ли более простой способ сделать это? И ради любопытства, где я ошибаюсь с приведенным выше кодом?