【问题标题】:Convert daily to weekly/monthly data with R使用 R 将每日数据转换为每周/每月数据
【发布时间】:2013-05-02 18:50:27
【问题描述】:

我有各种产品的每日价格系列;我想转换为具有每周或每月数据的新数据框。

我第一次使用 xts 是为了应用 to.weekly 函数……它仅适用于 OHLC 格式。 我确信可能存在类似于 to.weekly 的函数,但对于格式不是 OHLC 的数据框。

已经有不同的帖子与此相关,如下所示: Does rollapply() allow an array of results from call to function?Averaging daily data into weekly data

我最终使用了:

length(bra)

[1] 2416

test<-bra[seq(1,2416,7),]

会有更有效的方法吗? 谢谢。

【问题讨论】:

  • ?to.weekly 明确指出它适用于 OHLC 或单变量 对象。 Related.
  • 与其给我们您的数据图片,不如将dput(brazil[1:15, ]) 的输出粘贴到您的问题中,以便我们可以轻松地将其来源到我们自己的 R 会话中。
  • 您希望每周数据只是每周的最后一行,还是进行某种聚合?也许您希望每个输入列都使用 OHLC?

标签: r xts zoo quantmod


【解决方案1】:

让我们试试这个数据:

library(zoo)
tt <- seq(Sys.Date(), by='day', length=365)
vals <- data.frame(A=runif(365), B=rnorm(365), C=1:365)
z <- zoo(vals, tt)

现在我定义了一个提取年份和周数的函数(如果不需要区分年份,请删除%Y):

week <- function(x)format(x, '%Y.%W')

你可以使用这个函数来聚合zoo对象的平均值(例如):

aggregate(z, by=week, FUN=mean)

产生这个结果:

                A           B  C
2013.18 0.3455357  0.34129269  3
2013.19 0.4506297  0.57665133  9
2013.20 0.3950585  0.46197173 16
2013.21 0.5990886 -0.02689994 23
2013.22 0.5115043  0.18726564 30
2013.23 0.5327597  0.16250339 37

【讨论】:

    【解决方案2】:

    我对 R 相当陌生,但在遇到类似问题时偶然发现了这一点。我需要转换不是 OHLC 的 xts 数据。 to.monthly 声明它可以处理单变量序列,但它也详细说明它只支持返回 OHLC。我认为只需设置 OHLC=FALSE 即可。 或者,to.period 的来源使用以下函数,它甚至可以转换几个系列(都具有相同的时间索引)

    data.monthly <- data[ endpoints(data, on="months", k=1), ]
    

    简洁明了,甚至可以复制列名。

    【讨论】:

    • 刚刚看到的答案和这里一样:link
    • 您好,这个解决方案在上周开始发挥作用。它不平均。达到平均值可以使用apply.weekly (data, colMeans)
    【解决方案3】:

    使用tidyquant 可以帮助您实现这一目标,而无需将系列转换为zooxts

    library(tidyquant)
    
    library(zoo)
    
    tt <- seq(Sys.Date(), by='day', length=365)  
    vals <- data.frame(A=runif(365), B=rnorm(365), C=1:365)
    z <- data.frame(vals, tt)
    

    现在,使用tidyquant

    z <- z  %>% tq_transmute(mutate_fun = apply.monthly, FUN = mean, na.rm = TRUE)
    

    【讨论】:

      猜你喜欢
      • 2021-04-28
      • 1970-01-01
      • 2015-10-31
      • 2020-06-13
      • 1970-01-01
      • 2020-07-06
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      相关资源
      最近更新 更多