在R中更改频率时间序列

时间:2018-01-15 15:15:56

标签: r time-series frequency

作为输入,我在每日时间点有一个时间序列。我们可以将此时间序列称为_x_。对象_x_是一个时间序列,即由日期和度量组成。

我想调查每个月保持时间序列不变的效果。换句话说,我希望有一个新的时间序列_y_仍然具有每日频率,但月份中的观察值保持不变,等于该月的第一个值。

我已经研究过这个并尝试使用'tempdisagg'包,特别是'td'函数。然而,这对我来说似乎太复杂了,需要一个公式作为输入。此外,假设每个月有30天会在_x__y_之间产生差异,这是不可取的,因为时间序列的长度是几年。

是否有解决方案来启用此功能?

1 个答案:

答案 0 :(得分:0)

创建x(时间序列)

#include <stdio.h>
#include <string.h>

unsigned short CalculateCRC(unsigned char* a_szBuffuer, short a_sBufferLen){
    unsigned short usCRC = 0;
    for (short j = 0; j < a_sBufferLen; j++)
    {
    unsigned char* pucPtr = (unsigned char *)&usCRC;
    *(pucPtr + 1) = *(pucPtr + 1) ^ *a_szBuffuer++;
    for (short i = 0; i <= 7; i++)
    {
    if (usCRC & ((unsigned short) 0x8000))
    {
    usCRC = usCRC << 1;
    usCRC = usCRC ^ ((unsigned short) 0x8005);
    }
    else
    usCRC = usCRC << 1;
    }
    }
    return (usCRC);
}

void append(char* s, char c)
{
        int len = strlen(s);
        s[len] = c;
        s[len+1] = '\0';
}

int main() {

   char d = (char)0xA0;
   char d1 = (char)0x00;
   char d2 = (char)0x01;
   char d3 = (char)0x01;
   char sss[256]="";

   append(sss, d);
   append(sss, d1);
   append(sss, d2);
   append(sss, d3);
   unsigned char* uCB1 = (unsigned char*)sss;
   unsigned short CRC= CalculateCRC(uCB1,4);

   printf("CRC = %i\n", CRC);
   printf("%s\n", sss);
   printf("%x\n", CRC);
}

使用时间序列,每日和每月数据创建数据帧(db)

x <- ts(seq(1:62),  frequency = 365, start = c(2017, as.numeric(format(as.Date("2017-12-01"), "%j"))) )

每月提取第一个值

library(lubridate)
tms <- date_decimal(as.numeric(time(x)))
y_m<-as.character(substr(as.character(tms),1,7))
db<-as.data.frame(cbind(as.numeric(x),as.character(tms),y_m))
colnames(db)<-c("time_series","y_m_d","y_m")

创建最终输出

db_first<-db[!duplicated(db$y_m),]