在R中创建七天,每周平均(或移动平均线?)

时间:2014-04-21 21:06:53

标签: r dataframe average moving-average

我有大量的数据,我通过R喂养以产生平均值。相关数据涉及日期和温度读数。一天通常有多个温度读数。这些日期大约为6个月。

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

平均每周 - 7天滚动平均值(不是日历周) 平均最大值 - 最大滚动7天

所以,如果我的数据在2013年1月1日开始,我将平均所有温度读数平均在1/1/13和1/7/13之间,然后做同样的事情为1/8 / 13 - 1月15日13日等。我已经在Stack的其他地方告诉我,这实际上被称为" 平均每周"虽然我承认我不喜欢"很容易理解它不是移动平均线。我已经完成了一些研究,但总的来说,我很难理解如何解决这个问题。

对于你们之间的视觉,这基本上是我正在处理的数据(实际的data.frame看起来很不一样(见下面的输入头)并且有几千条记录,但是这些是两个相关专栏的专有名称):

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 head info的小样本:

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") 

1 个答案:

答案 0 :(得分:3)

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)

它听起来不像我的移动平均值