Как преобразовать ежедневные данные за период в 30 лет в Ежемесячные данные для многомерного ряда? - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть фрейм данных, как показано ниже:

 str(Rainfall_Complete)
'data.frame':   8221 obs. of  18 variables:
 $ Date          : Date, format: "1985-04-29" "1985-04-30" "1985-05-01" ...
 $ Month         : Ord.factor w/ 12 levels "Jan"<"Feb"<"Mar"<..:
 $ Season        : Factor w/ 4 levels "Monsoon","PostMonsoon",..:.
 $ Year          : chr  "1985" "1985" "1985" "1985" ...
 $ Stn A         : num  0 8.8 0 15 26.2 0 2.5 0 0 0 ...
 $ Stn B         : num  0 0 26 11 13.8 20 0.26 0 0 0 ...
 $ Stn C         : num  0.1 0 0 0 13.5 27 16 5 0 0 …

Я хочу преобразовать вышеуказанные дневные временные ряды в месячные временные ряды. Я хочу, чтобы мои данные выглядели примерно так

Year  Month StnA   StnB   StnC……..

1985   Jan   150    100   120

1985   Feb   120     98    58

….

2010   Jan   200    100    87

2010   Feb   140    145    120

Я попробовал следующее, однако это работает только для одномерных серий

library(dplyr)
Monthly_rainfall <- Rainfall_Complete %>% group_by(Year,Month)%>% summarise()

Любая помощь будет оценена

1 Ответ

0 голосов
/ 12 декабря 2018

Ваша попытка использует dplyr, но вопрос помечен xts и lubridate, поэтому здесь есть решение, использующее эти пакеты с представлением.

library(lubridate)
library(xts)

## Create some basic data
ans6 <- xts(anscombe[, 1:6], order.by = as.Date("2018-01-28") + 1:nrow(anscombe))

## Summary by month
mon6 <- apply.monthly(ans6, FUN = mean)

## Re-format
df6 <- as.data.frame(mon6)
df6$year <- year(rownames(df6))
df6$month <- month(rownames(df6), label = TRUE)

df6
## x1       x2       x3    x4       y1       y2 year month
## 2018-01-31 10.33333 10.33333 10.33333 8.000 7.523333 8.673333 2018   Jan
## 2018-02-08  8.50000  8.50000  8.50000 9.375 7.492500 7.061250 2018   Feb
...