[英]R - Daily to Montly Time Series - Repeated Days
我有一個包含每日時間序列的數據框,我想將其轉換為每月格式,格式如下:
DATE VALOR
3/5/2014 8.9
3/5/2014 50
3/5/2014 50
3/6/2014 77.4
3/7/2014 97.95
3/8/2014 118.5
3/8/2014 139.05
3/8/2014 159.6
3/10/2014 180.15
3/11/2014 200.7
可以看出,數據庫中的日期並不是均勻重復的。 最好的進行方法是什么? 除此之外,VALOR列應該是SUM,而不是MEAN。
假設應使用sum()
匯總data.frame
所有時間序列,然后可以嘗試:
library(data.table)
setDT(df)
df[, lapply(.SD, sum), by = format(DATE, "%Y-%m")]
一個小例子:
df <- data.frame(DATE = seq(as.Date("2016-01-01"), length.out = 100, by = 1)
, x1 = 1:100, x2 = 1:100)
library(data.table)
setDT(df)
df[, lapply(.SD, sum), by = .(Date = format(DATE, "%Y-%m"))]
Date x1 x2
1: 2016-01 496 496
2: 2016-02 1334 1334
3: 2016-03 2356 2356
4: 2016-04 864 864
在使用Zoo創建顯示的Zoo對象時閱讀它。 索引將是Yearmon對象,直接表示年/月。
請注意,與使用字符串表示年/月不同,這提供了可以操縱的年/月(例如,向其中添加一個月,將其與plot和ggplot結合使用等)。
library(zoo)
z <- read.zoo(df, FUN = as.yearmon, format = "%m/%d/%Y", aggregate = sum)
給予:
> z
Mar 2014
1082.25
如果需要數據框結果,請使用fortify.zoo(z)
。
注意:以可重復形式輸入的假定為:
Lines <- "
DATE VALOR
3/5/2014 8.9
3/5/2014 50
3/5/2014 50
3/6/2014 77.4
3/7/2014 97.95
3/8/2014 118.5
3/8/2014 139.05
3/8/2014 159.6
3/10/2014 180.15
3/11/2014 200.7"
df <- read.table(text = Lines, header = TRUE)
因此,如果我理解正確,則可以按月分組(也可以按年分組)。 使用dplyr
df %>%
mutate(month = format(date, "%m"), year = format(date, "%Y")) %>%
group_by(month, year) %>%
summarise(total_sum = sum(value))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.