【问题标题】:Creating a seven day, average-by-week-of-year (or moving average?) in R在 R 中创建一个 7 天的平均一周年(或移动平均线?)
【发布时间】:2014-04-21 21:06:53
【问题描述】:

我有大量数据通过 R 提供以生成平均值。相关数据包括日期和温度读数。一天通常有多个温度读数。日期大约为 6 个月。

研究人员要求的标准中描述如下:

平均每周 – 7 天滚动平均值(非日历周) 平均最大值 – 7 天滚动最大值

因此,如果我的数据从 2013 年 1 月 1 日开始,我会平均 13 年 1 月 1 日到 13 年 1 月 7 日之间的所有温度读数,然后在 13 年 1 月 8 日做同样的事情 - 1/15/13 等等。我在 Stack 的其他地方被告知,这实际上被称为“平均每周平均”,尽管我承认我不太明白它为什么不是移动平均线.我做了一些研究,但我完全是新手,我一直在努力理解如何解决这个问题。

对于你们之间的视觉,这本质上是我正在处理的那种数据(实际的 data.frame 看起来有很大不同(参见下面的 dput 头)并且有几千条记录,但这些是正确的两个相关列的名称):

DATE    |    TEMP
-----------------
1/2/13     34.4
1/2/13     36.4
1/2/13     34.3
1/4/13     45.6
1/4/13     33.5
1/5/13     45.2
1/6/13     53.9
1/7/13     34.6
1/7/13     36.2
1/8/13     22.4
1/9/13     30.8
1/9/13     33.2

我一直在看 xts 库:

xts(x = NULL,
    order.by = index(x),
    frequency = NULL,
    unique = TRUE,
    tzone = Sys.getenv("TZ"),
    ...)

这看起来很有希望,但我无法完全弄清楚,而且文档并没有太大帮助。

xts(x = mydf, order.by = DATE(x), frequency = 7...?

想法?谢谢。

这是 dput 头部信息的小样本:

structure(list(RECID = 579:584, SITEID = c(101L, 101L, 101L, 
101L, 101L, 101L), MONTH = c(6L, 6L, 6L, 6L, 6L, 6L), DAY = c(7L, 
7L, 7L, 7L, 7L, 7L), DATE = structure(c(34L, 34L, 34L, 34L, 34L, 
34L), .Label = c("10/1/2013", "10/10/2013", "10/11/2013", "10/12/2013", 
"10/2/2013", "10/3/2013", "10/4/2013", "10/5/2013", "10/6/2013", 
"10/7/2013", "10/8/2013", "10/9/2013", "6/10/2013", "6/11/2013","9/9/2013"), class = "factor"), TIMESTAMP = structure(784:789, .Label = c("10/1/2013 0:00", 
"10/1/2013 1:00", "10/1/2013 10:00", "10/1/2013 11:00", "10/1/2013 12:00", 
"10/1/2013 13:00", "10/1/2013 14:00", "10/1/2013 15:00", "10/1/2013 16:00", 
"10/1/2013 17:00", "10/1/2013 18:00", "10/1/2013 19:00", "10/1/2013 2:00"), class = "factor"), TEMP = c(23.376, 23.376, 23.833, 24.146, 
24.219, 24.05), X.C = c(NA, NA, NA, NA, NA, NA)), .Names = c("RECID", 
"SITEID", "MONTH", "DAY", "DATE", "TIMESTAMP", "TEMP", "X.C"), row.names = c(NA, 
6L), class = "data.frame") 

【问题讨论】:

  • 如果我们能告诉你 data.frame 的列类,那会很有帮助。你能发帖dput(head(mydf)),或者至少dput(head(mydf[, c("DATE", "TEMP")]))吗?
  • @shujaa - 完成。 :) 正如我所说,实际数据与我发布的示例数据不同,因为我只需要关心温度和日期,但如果 dput 负责人有帮助,那就是。
  • 这绝对有帮助,主要是因为我可以看到您的日期是 factor,而不是类似 Date 的对象。
  • 知道了,还在学习 R。我很感激。

标签: r dataframe average moving-average


【解决方案1】:
sampledata = ' 
    DATE       TEMP
    1/2/13     34.4
    1/2/13     36.4
    1/2/13     34.3
    1/4/13     45.6
    1/4/13     33.5
    1/5/13     45.2
    1/6/13     53.9
    1/7/13     34.6
    1/7/13     36.2
    1/8/13     22.4
    1/9/13     30.8
    1/9/13     33.2
'

ex1 = read.table(text=sampledata,header=T)

library(xts)

ex1$DATE = as.Date(ex1$DATE,format='%m/%d/%y')
ex2= xts(ex1$TEMP,order.by=ex1$DATE)
xts::apply.weekly(ex2, mean)

对我来说这听起来不像移动平均线

【讨论】:

  • 我真的很感谢你把它放在一起(它对示例数据非常有效!)但是我如何将我的实际日期列(实际上是几千个条目长)转换为同一个 Unix纪元格式?
  • 也许这样更有意义?
  • 是sampledata,在这种情况下,是一个data.frame吗?
  • 没有,但是当我使用read.table时它变成了一个,所以ex1是一个data.frame
  • 好的,如果这两个列(DATE 和 TEMP)包含在一个 CSV 文件中并且有几千行长,有没有办法将它们读入 sampledata 变量?就目前而言,我只是将我的 CSV 数据提取到一个 data.frame 中,这显然在这里不起作用。 :)
猜你喜欢
  • 2018-02-08
  • 2017-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-22
  • 2017-09-01
  • 2023-03-12
相关资源
最近更新 更多