英招

牢骚太盛防肠断,风物长宜放眼量

0%

时间序列补齐(by R)

许多时间序列数据可能部分时间没有记录而直接删除了时间段,通过R补齐缺失时间段并进行线性插值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#时间序列补齐,默认步长1s,步长为1小时的话得3600*,从"2022-12-31 13:00:00"开始,共10295个时间步
ts<-data.frame(strptime("2022-12-31 13:00:00","%Y-%m-%d %H:%M:%S",tz="UTC")+3600*0:10294)#生成时间序列
#查看序列最后是否满足自己需求
tail(ts)
#导入数据
data1<- read.table('E:\\data\\timeseries.txt',sep = "\t",encoding="UTF-8",header = T)
#查看数据最后是否匹配自己构建的序列
tail(data1)

#给ts列添加编号,列名为number
ts<-cbind(ts,1:nrow(ts))
colnames(ts)[length(ts)]<-"number"

#数据第1列为时间,列名改为time,转化为POSIXct格式
colnames(ts)[1]<-colnames(data1)[1]<-"time"
data1$time<-as.POSIXct(data1$time, format = "%Y-%m-%d %H:%M:%S",tz="UTC")
#写入排序列
data<-merge(data1,ts,by="time",all.y=TRUE)#合并
which(duplicated(data$number) == T)#查看重复行
#data<-data[-c(which(duplicated(data$number) == T)-1),]#删除重复行
1-(nrow(data)-nrow(na.omit(data)))/nrow(data)#数据完整性
#导出
write.table(data,file="E:\\output\\时间填充.txt",sep = "\t",row.names=FALSE,col.names=TRUE)