我的数据框(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
我想从某些时间窗口计算三个站点的平均值。期限为:a)2000年至2006年,b)2001年至2006年,c)2002年至2006年,d)2000年至2004年
我在句号“ a”中使用的代码如下:
P <- cbind(df[,2:4]
mean_a <- aggregate(P ~ df[1:7,], mean)
我得到以下信息:
aggregate.data.frame(as.data.frame(x),...)中的错误: “ by”必须是列表
答案 0 :(得分:2)
像这样吗?
> 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
答案 1 :(得分:0)
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())