У меня есть данные, как здесь. Данные содержат значения осадков за 3 года (2005-2006-2007) отдельно.
Данные:
mydata<-structure(list(X2005.hourly = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0.6, 0.2, 0, 0, 0.6, 0.2, 0.6, 0.6, 0, 0, 0, 0.6, 1.2, 1.8, 1.8,
1.2, 1, 1.2, 1.6, 1.2, 1.4, 1, 1.2, 0.8, 0.8, 0.2, 0, 0, 1.6,
0.4, 0, 0.4, 1.2, 0.8, 0.2, 0.4, 0.2, 0.4, 0.4, 0.2, 0.2, 0.2,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.2, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.2, 0.2, 0.4, 0.4,
0.2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0.2, 0.4, 1.2, 1.6, 2.2, 1.8, 0.4, 0.6, 0, 0.2, 0.2,
0, 0, 0, 0, 0, 0, 0, 0, 0.2, 0.2, 0.2, 0, 0.6, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.4, 0.2,
0, 0, 0.8, 0, 0, 0.2, 0, 0, 0, 0, 0.2, 0.2, 0.2, 0, 0, 1.2, 4,
0.2, 0, 0, 0, 0, 0, 0, 0, 1.6, 0.6, 0, 0, 0, 1.4, 0.6, 0.4, 0.8,
0, 0, 0, 0, 0.2, 0, 0.2, 0, 0, 0, 0, 0.6, 0, 0, 0, 0, 0.2, 1.2,
1, 1.8, 2, 1.8, 0.4, 0.6, 1.2, 1.8, 1.4, 1.2, 0.6, 0.4, 0, 0.2,
0.2, 1.6, 1.6, 1.4, 0.8, 0.4, 0.2, 0.2, 0, 0.6, 0, 0.4, 0.4,
0.2, 0.2, 0.2, 0.4, 0.4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0.6, 0, 0, 0, 0.2, 0.2, 0.4, 0.4, 1.6, 1.8,
1.2, 1.4, 1.4, 1.4, 0.6, 0.6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0), X2006.hourly = c(0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 4.8,
1, 0, 0, 0, 0, 0, 0, 0, 0.8, 0, 0, 0, 0, 0, 0, 6.6, 0.2, 0, 0,
0.2, 0, 0, 0.2, 0, 1.4, 0, 1.2, 0, 0.2, 0, 0.2, 1, 0, 0, 0, 0,
0, 0.2, 1.8, 2, 2.2, 0.6, 0.8, 0, 0, 0, 0.2, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0.2, 0, 0, 0.4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0.2, 1.8, 5.8, 0.2, 0.4, 0, 3.8, 0.2, 1.2, 0.4, 0,
0, 1, 0.4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0.2, 0.6, 0.4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0.8, 0.8, 1, 0.2, 0, 0.2, 0, 0, 0.6, 2.4,
0.2, 0, 0.2, 0, 0, 1.6, 0.2, 2, 0, 1.2, 4.6, 0.6, 0, 0, 0, 0,
0, 0, 0, 0, 0.4, 0, 0, 0, 0, 0, 0.2, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0.8, 0.4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0.2, 0.2, 0, 0, 0, 0, 0.2, 0, 0, 0, 0, 0, 0, 0, 0,
0.2, 1.8, 0.6, 0, 0, 0, 0.4, 2, 1, 0.8, 0.4, 0.2, 0, 0.2, 0,
0.8, 0.8, 0.2, 0.2, 0, 0.4, 0.4, 0.6, 0.8, 4, 2, 0.8, 2.6, 1.4,
0.6, 1, 1, 1, 1.2, 1.2, 0.8, 1.6, 1.8, 0.4, 0.2, 0.2, 0.2, 0.4,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.6, 1.2, 0.6, 0.8,
0.8, 1, 0.8, 1.2, 1.2, 0.8, 1, 2.2, 3.4, 2.6, 1.8, 1.6, 1.8,
3.6, 3, 1.8, 3.2, 1.8, 1, 0.6, 0.4, 0, 1, 0.6, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 3.6, 3.8, 0.2, 0.4, 0, 0.2, 0.2, 0.4, 0.2,
0.2, 0.2, 0.4, 0, 0, 0, 0.2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0.2, 0.2, 0, 0.2, 0.6, 0, 0.6, 0.4, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0.4, 1, 0, 0, 0, 0.2, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0.6, 0.4, 0.6, 0.4, 0.6, 1, 0.8, 0.2, 0, 0,
0.2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0.2, 0.6, 1.4, 2.2, 0, 0.4, 1, 0.6, 0, 1.2, 1.6, 0.6, 0,
0.2, 0, 0, 0, 0, 0, 0.2, 0, 0, 0.2, 0, 0, 0.2, 0, 0.2, 0, 0,
0, 0, 0.2, 0, 0, 0, 0, 0, 0, 0.2, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0.4, 0.2, 0, 1.2, 0.4, 1, 0.6, 0.8, 1, 0,
0, 0, 0, 0), X2007.hourly = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0.6, 0.4, 1, 2.2, 2.6, 1.8, 0.8, 0.6, 0, 0, 0.2, 0, 0, 0,
0, 0.4, 0, 0.2, 0.2, 0, 0, 0.2, 0, 0, 0, 0, 0.6, 0.4, 0.4, 0.6,
0.4, 0.4, 0.2, 0, 0, 0.2, 0.2, 0, 0, 0, 0.2, 0, 0, 0.2, 0.4,
0.4, 0, 1.4, 0.4, 0.8, 0.4, 0.2, 0.4, 0.6, 0.8, 1.6, 0.6, 0.4,
0.6, 0.8, 1, 0.8, 1.4, 1.4, 2.2, 0.8, 0.2, 0.2, 0.2, 0, 0, 0.6,
0.6, 0.4, 0.2, 0.4, 0.6, 0, 0, 0, 0, 0, 0, 0, 0, 0.4, 0.6, 1,
1, 0.6, 1.4, 1.4, 0.6, 0.4, 0.6, 0.6, 0.8, 1, 1.8, 1.6, 0.6,
0.4, 0.2, 0.2, 0, 0.2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.4, 0.8, 1.6, 1.8, 1.6,
1, 1, 0.4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0.2, 0, 0, 0, 0, 0, 0.2, 0.4, 0, 0, 0.2, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.4, 0, 0.2, 0, 0, 0, 0.2, 0.2,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.2, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0.2, 0, 0.6, 0.6, 0.6, 0.8, 0.2, 0, 1, 0.2, 0.6, 1.6, 1, 0.6,
0.6, 0.4, 0.6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0.2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 3.4, 0, 0, 0, 0, 1.6, 1.4, 0.2, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.2, 2.4, 1.2, 0, 0.2, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0.6, 3, 1.4, 0, 0, 0.2, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0.6, 0.2, 2.6, 3, 0.4, 0, 0, 0, 0, 0, 0, 0,
0.2, 0, 0, 0, 0.2, 0, 0, 0, 0, 0.8, 0.2, 0.2, 0, 0, 0, 0, 0,
0.2, 0, 0.2, 0, 0.4, 0.4, 0.8, 0.8, 1.2, 1, 0.6, 0.6, 0.4, 0.2,
0.2, 0.4, 0.2, 0.2, 0.4, 0.2, 0.8, 0, 0, 0.2, 0, 0, 0.2, 0, 0.2,
0, 0.2, 0, 0.2, 0.2, 0, 0, 0, 0)), .Names = c("X2005.hourly", "X2006.hourly",
"X2007.hourly"), class = "data.frame", row.names = c(NA, -744L))
И функция, которую я использовал раньше:
myfun<- function(x) {
y<-as.matrix(sapply(x, as.numeric))
#Aggregating hourly data to 6,12 and 24 hourly data
h<-sapply(c(1, 6, 12, 24), function(hrs) colSums(matrix(y, ncol=length(x)/hrs)))
hours<-sapply(list(h[[1]], h[[2]], h[[3]], h[[4]]), function(qq) list(qq))
names(hours)<-c("hourly", "h.6", "h.12", "h.24")
#Calculating means of 1, 6, 12 and 24 hourly data
means<-sapply(list(hours[[1]], hours[[2]], hours[[3]], hours[[4]]), function(ss) mean(ss, na.rm = T))
#means of 1, 6, 12 and 24 hourly data
mean1<-means[[1]]
mean6<-means[[2]]
mean12<-means[[3]]
mean24<-means[[4]]
meanlist<-list(mean1, mean6, mean12, mean24)
names(meanlist) <- c("mean1", "mean6", "mean12", "mean24")
return(meanlist)
}
Что я сделал:
Я применяю myfun
с функцией lapply
и получаю результаты отдельно для каждого года. И здесь нет проблем.
results<-lapply(mydata, myfun)
Что я хочу:
Как видите, внутри names(hours)
есть термин h.24
в функции myfun
. Для вычисления среднего значения 24 hourly data
функция использует данные h.24
, агрегированные из данных hourly
. Но я хочу использовать внешние 24-часовые daily
данные вместо h.24
. В приведенных ниже данных есть daily
значения отдельно для 2005,2006,2007
adddata<-structure(list(X2005.daily = c(0, 0, 3.4, 21.4, 1.8, 1.4, 0,
0, 0, 0, 0, 0, 0, 0, 0, 8.6, 1.4, 0, 0, 0, 0, 0.6, 7, 6.4, 21.8,
3.2, 0, 0, 0.6, 11.2, 0), X2006.daily = c(0, 8.6, 11.2, 8.4,
0, 0, 0, 0, 0, 7.8, 7.6, 1.2, 10.2, 7, 0, 0, 1.6, 7.6, 23.6,
3.2, 0, 9, 31.4, 10, 2.2, 1.6, 0, 4.8, 10, 1.2, 4.6), X2007.daily = c(0.6,
9.4, 4.2, 7.2, 15, 15, 0.4, 0, 8.6, 0, 0.2, 0.8, 0, 0.6, 0.6,
1.4, 8.2, 0.2, 0, 0, 0, 0, 5, 1.6, 4, 5.2, 0, 0, 7, 4.2, 7.2)), .Names = c("X2005.daily",
"X2006.daily", "X2007.daily"), class = "data.frame", row.names = c(NA,
-31L))
Вкратце: Я хочу добавить внешние данные daily
для каждого года, а затем я хочу рассчитать средние значения для 1, 6, 12 часовых значений, а также средства добавления данных daily
для каждого год. Таким образом, результаты mean1, mean6, mean12
будут такими же, но mean24
будет средним значением добавленных дневных значений.