R - 每日到蒙特利时间序列 - 重复的日子

时间:2017-09-19 14:40:21

标签: r

我有一个包含每日时间序列的数据框,我想将其转换为每月,格式如下:

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。

3 个答案:

答案 0 :(得分:1)

假设data.frame中的所有时间序列都应由sum()汇总,那么可以尝试:

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

答案 1 :(得分:0)

因此,如果我理解它是正确的,你想按月分组(并按年假设)。使用dplyr

$ for f in *; do printf '%s%s' "$s" "$f"; s=" OR "; done; printf '\n'
file1 OR file2 OR file3

答案 2 :(得分:0)

使用zoo创建显示的zoo对象。该索引将是一个直接表示年/月的yearmon对象。

请注意,与使用字符串表示年/月不同,这给出了可以操作的年/月(例如,添加一个月,使用情节和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)