рассчитать среднее за разные периоды времени - PullRequest
0 голосов
/ 04 февраля 2020

Мой фрейм данных (df):

Year Site1 Site2 Site3   
2000 2 4 5  
2001 2 5 45  
2002 4 4 56  
2003 23 67 45  
2004 4 4 34  
2005 3 56 34   
2006 67 12 24

И я хочу вычислить среднее значение для трех сайтов за определенное время windows. Периоды будут: а) с 2000 по 2006 год, б) с 2001 по 2006 год c) с 2002 по 2006 год и г) с 2000 по 2004 год

Код, который я использовал для периода "а", следующее:

P <- cbind(df[,2:4]
mean_a <- aggregate(P ~ df[1:7,], mean)

и я получаю следующее:

Ошибка в aggregate.data.frame (as.data.frame (x), ...): ' по 'должен быть списком

Ответы [ 2 ]

2 голосов
/ 04 февраля 2020

Как то так?

> ix=list(2000:2006,2001:2006,2002:2006,2000:2004)
> lapply(ix,function(x){colMeans(subset(dat,Year%in%x,select=-c(Year)))})

[[1]]
   Site1    Site2    Site3 
15.00000 21.71429 34.71429 

[[2]]
   Site1    Site2    Site3 
17.16667 24.66667 39.66667 

[[3]]
Site1 Site2 Site3 
 20.2  28.6  38.6 

[[4]]
Site1 Site2 Site3 
  7.0  16.8  37.0
0 голосов
/ 04 февраля 2020
library(dplyr)
library(purrr)

fy_1 <- c(2000:2006)
fy_2 <- c(2001:2006)
fy_3 <- c(2006:2006)
fy_4 <- c(2000:2004)

fy <- list(fy_1, fy_2, fy_3, fy_4)

map(.x = fy, ~ foo %>%
  filter(Year %in% .x) %>%
  select(-Year) %>%
  colMeans())
...