Создание семидневного среднего за неделю года (или скользящего среднего?) В R

У меня есть тонна данных, которые я загружаю через R, чтобы получить средние значения. Соответствующие данные включают даты и показания температуры. За один день часто бывает несколько значений температуры. Сроки охватывают примерно 6 месяцев.

Два критерия, запрошенные исследователями, были описаны следующим образом:

Среднее значение за неделю - 7-дневное скользящее среднее (не календарная неделя). Среднее максимальное - 7-дневное скользящее максимальное.

Итак, если бы мои данные начинались с 1/1/13, я бы усреднил ВСЕ показания температуры между 1/1/13 и 1/7/13, а затем проделал бы то же самое с 1/8/13 - 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") 

person TheNovice    schedule 21.04.2014    source источник
comment
Было бы очень полезно, если бы мы могли указать классы столбцов вашего data.frame. Не могли бы вы опубликовать dput(head(mydf)) или хотя бы dput(head(mydf[, c("DATE", "TEMP")]))?   -  person Gregor Thomas    schedule 22.04.2014
comment
@shujaa - готово. :) Как я уже сказал, фактические данные отличаются от данных образца, которые я опубликовал, так как мне действительно нужно беспокоиться только о температуре и дате, но если голова dput помогает, вот она.   -  person TheNovice    schedule 22.04.2014
comment
Это определенно помогает, в основном потому, что я вижу, что ваша дата - это factor, а не что-то вроде Date объекта.   -  person Gregor Thomas    schedule 22.04.2014
comment
Понятно, все еще изучаю Р. Я ценю это.   -  person TheNovice    schedule 22.04.2014


Ответы (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)

Для меня это не похоже на скользящую среднюю

person aatrujillob    schedule 21.04.2014
comment
Я очень ценю, что вы собрали это вместе (и это сработало довольно хорошо для образцов данных!), Но как мне преобразовать мой фактический столбец даты (который на самом деле состоит из нескольких тысяч записей) в тот же формат эпохи Unix? - person TheNovice; 22.04.2014
comment
Может, в этом есть больше смысла? - person aatrujillob; 22.04.2014
comment
Является ли в данном случае sampledata data.frame? - person TheNovice; 22.04.2014
comment
нет, но он становится единым, когда я использую read.table, поэтому ex1 - это data.frame - person aatrujillob; 22.04.2014
comment
Хорошо, если эти два столбца (DATE и TEMP) содержатся в файле CSV и имеют длину в несколько тысяч строк, есть ли способ прочитать их в переменной sampledata? В нынешнем виде я просто поместил свои данные CSV в data.frame, что, очевидно, здесь не работает. :) - person TheNovice; 22.04.2014
comment
О, я вижу, где я запутался. Вы, сэр, заслуживаете золотой еды. БЛАГОДАРЮ ВАС! - person TheNovice; 22.04.2014