Учитывая упрощение моего набора данных, например:
df <- data.frame("ID"= c(1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2),
"ForestType" = c("oak","oak","oak","oak","oak","oak","oak","oak","oak","oak","oak","oak",
"pine","pine","pine","pine","pine","pine","pine","pine","pine","pine","pine","pine"),
"Date"= c("1987.01.01","1987.06.01","1987.10.01","1987.11.01",
"1988.01.01","1988.03.01","1988.04.01","1988.06.01",
"1989.03.01","1989.05.01","1989.07.01","1989.08.01",
"1987.01.01","1987.06.01","1987.10.01","1987.11.01",
"1988.01.01","1988.03.01","1988.04.01","1988.06.01",
"1989.03.01","1989.05.01","1989.07.01","1989.08.01"),
"NDVI"= c(0.1,0.2,0.3,0.55,0.31,0.26,0.34,0.52,0.41,0.45,0.50,0.7,
0.2,0.3,0.4,0.53,0.52,0.54,0.78,0.73,0.72,0.71,0.76,0.9),
check.names = FALSE, stringsAsFactors = FALSE)
Я хотел бы получить средние значения NDVI к определенному периоду времени, в данном случае к году . Примите во внимание, что в моем реальном наборе данных он мне понадобится для сезонов, поэтому он должен быть адаптируемым .
Эти средства должны учитывать:
- Обрезание выбросов: например, 25% самых высоких значений и 25% самых низких значений.
- Они должны быть по классу , в данном случае по полю ID.
Таким образом, результат должен выглядеть примерно так:
> desired_df
ID ForestType Date meanNDVI
1 1 oak 1987 0.250
2 1 oak 1988 0.325
3 1 oak 1989 0.430
4 2 pine 1987 0.350
5 2 pine 1988 0.635
6 2 pine 1989 0.740
В этом случае, например, 0.250
соответствует среднему значению NDVI
для 1987
для ID=1
, и это среднее от 4 значения того года, взяв самые низкие и самые высокие.
Большое спасибо!