簡體   English   中英

R-每日到Montly時間序列-重復天數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM