作为输入,我在每日时间点有一个时间序列。我们可以将此时间序列称为_x_
。对象_x_
是一个时间序列,即由日期和度量组成。
我想调查每个月保持时间序列不变的效果。换句话说,我希望有一个新的时间序列_y_
仍然具有每日频率,但月份中的观察值保持不变,等于该月的第一个值。
我已经研究过这个并尝试使用'tempdisagg'
包,特别是'td'
函数。然而,这对我来说似乎太复杂了,需要一个公式作为输入。此外,假设每个月有30天会在_x_
和_y_
之间产生差异,这是不可取的,因为时间序列的长度是几年。
是否有解决方案来启用此功能?
答案 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),]