2017-02-03 17 views
-1

Вот пример моих данных:агрегирование данных за неделю, или на 3 дня

Date  Prec  aggregated by week (output) 

     1/1/1950 3.11E+00 4.08E+00 

     1/2/1950 3.25E+00 9.64E+00 

     1/3/1950 4.81E+00 1.15E+01 

     1/4/1950 7.07E+00  

     1/5/1950 4.25E+00  

     1/6/1950 3.11E+00  

     1/7/1950 2.97E+00  

     1/8/1950 2.83E+00  

     1/9/1950 2.72E+00  

     1/10/1950 2.72E+00  

     1/11/1950 2.60E+00  

     1/12/1950 2.83E+00  

     1/13/1950 1.70E+01  

     1/14/1950 3.68E+01  

     1/15/1950 4.24E+01  

     1/16/1950 1.70E+01  

     1/17/1950 7.07E+00  

     1/18/1950 3.96E+00  

     1/19/1950 3.54E+00  

     1/20/1950 3.40E+00  

     1/21/1950 3.25E+00 

У меня есть данные по осадкам серии долгое время, и я хочу, чтобы объединить его таким образом, что (выход в третьей колонке , Я рассчитал его из excel) следующим образом

Если я делаю агрегацию еженедельно выход в 1-й ячейке = средний показатель от дня 1 до 7 дней. выход во 2-й ячейке = средний показатель от 8 до 14 дней. Выход в 3-й ячейке = средний показатель от 15 до 21 дня

Если я делаю агрегацию на 3 дня выход в 1-й ячейке = средний день от 1 до 3 дней. выход во 2-й ячейке = средний день от 4 до 6 дней.

Я обеспечу функцию с помощью «prec» и «time step». Я пробовал циклы и lubridate, POSIXct и некоторые другие функции, но я не могу определить выход, как в третьей колонке.

Один код, который я придумал, бежал без ошибок, но мой вывод бот правильно. Где мой набор данных.

tt=as.POSIXct(paste(dat$Date),format="%m/%d/%Y") #converting date formate 
    datZoo <- zoo(dat[,-c(1,3)], tt) 
    weekly <- apply.weekly(datZoo,mean) 
    prec_NLCD <-data.frame (weekly) 

Также я хотел написать его в виде функции. Ваши предложения будут полезны.

ответ

1

Предполагая, что данные, воспроизводимые в примечании в конце, создают еженедельные средства, zm, а затем объединяют их с z.

(По-видимому, имеет смысл объединить средства в точке, в которой они вычислены, то есть merge(z, zm) вместо строки, помеченной ##, но для согласованности с выходом, указанным в вопросе, они помещаются на глава данных ниже)

library(zoo) 

z <- read.zoo(text = Lines, header = TRUE, format = "%m/%d/%Y") 

zm <- rollapplyr(z, 7, by = 7, mean) 
merge(z, zm = zoo(coredata(zm), head(time(z), length(zm)))) ## 

дает:.

   z  zm 
1950-01-01 3.11 4.081429 
1950-01-02 3.25 9.642857 
1950-01-03 4.81 11.517143 
1950-01-04 7.07  NA 
1950-01-05 4.25  NA 
1950-01-06 3.11  NA 
1950-01-07 2.97  NA 
1950-01-08 2.83  NA 
1950-01-09 2.72  NA 
1950-01-10 2.72  NA 
1950-01-11 2.60  NA 
1950-01-12 2.83  NA 
1950-01-13 17.00  NA 
1950-01-14 36.80  NA 
1950-01-15 42.40  NA 
1950-01-16 17.00  NA 
1950-01-17 7.07  NA 
1950-01-18 3.96  NA 
1950-01-19 3.54  NA 
1950-01-20 3.40  NA 
1950-01-21 3.25  NA 

Примечание:

Lines <- "Date  Prec  
    1/1/1950 3.11E+00 
    1/2/1950 3.25E+00 
    1/3/1950 4.81E+00 
    1/4/1950 7.07E+00  
    1/5/1950 4.25E+00  
    1/6/1950 3.11E+00  
    1/7/1950 2.97E+00  
    1/8/1950 2.83E+00  
    1/9/1950 2.72E+00  
    1/10/1950 2.72E+00  
    1/11/1950 2.60E+00  
    1/12/1950 2.83E+00  
    1/13/1950 1.70E+01  
    1/14/1950 3.68E+01  
    1/15/1950 4.24E+01  
    1/16/1950 1.70E+01  
    1/17/1950 7.07E+00  
    1/18/1950 3.96E+00  
    1/19/1950 3.54E+00  
    1/20/1950 3.40E+00  
    1/21/1950 3.25E+00" 
+0

Спасибо Grothendieck rollapplyr и зоопарк работал – Wisconsin