我有一些数据集是每1分钟收集的,但我必须用10分钟数据的平均值替换数据。所以我有以下 R 代码。
for(k in 1:(length(temp[,1])/10)){
temp2[k,1]<-temp[1,1]
temp2[k,2]<-temp[k*10,2]
temp2[k,3]<-mean(na.omit(as.numeric(temp[((k-1)*10+1):k*10,3])))
}
然而,这段代码的效率太低了。 还有一个问题。由于某些数据缺失,时间变量不总是连续的。我必须计算每个真实10分钟的数据(例如从2014年1月1日00:00到2014年1月1日00:10),无论这10分钟内有多少个观测值。因此循环进入到
tmp<-na.omit(temp[temp[,2]>(st+600*(k-1)) & temp[,2]<=(st+600*k),])
temp2[k,1]<-tmp[1,1]
temp2[k,2]<-st+600*k
temp2[k,3]<-mean(na.omit(as.numeric(tmp[,3])))
这是不可承受的。它不能有效地处理类似“某些月份缺失”的情况。那么,在效率不低的情况下,我该如何在R中解决这个问题呢?
原始数据:
Time Var1
2014-01-01 00:01 10
2014-01-01 00:02 12
2014-01-01 00:03 43
...
2014-01-01 00:10 52
期望输出:
Time Var1
2014-01-01 00:10 (mean of every 10 mins)
2014-01-01 00:20 (mean of every 10 mins)
...
dput()
函数将数据的一个经过编辑的子集转储出来。可以查看zoo::rollmean()
函数和tseries
包。 - smci