我有一个包含每日时间序列的数据框,我想将其转换为每月,格式如下:
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。
答案 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)