我如下進行:
- 生成以時間序列「X」與所有1秒時間戳,即沒有間隙。
- 從數據框「數據」中填入測量值。
- 使用時間序列「X」中的數據計算10分鐘統計量並將結果寫入新的時間序列「Y」。
- 刪除某些數據丟失的「Y」行。
。
library(timeDate)
library(timeSeries)
data <- read.table(filename, header=TRUE)
########################################################################
# Build a timeSeries "X" from the data.frame "data":
tm <- as.timeDate(strptime(paste(as.character(data$date),as.character(data$time)),
format="%Y-%m-%d %H:%M:%S.00",
tz = "GMT"),
zone = "GMT")
t <- timeSequence(start(tm),end(tm),by="secs")
X <- timeSeries(data.frame(speed = rep(NA,length(t)),
angle = rep(NA,length(t))))
setTime(X) <- t
X[tm]$speed <- data$speed
X[tm]$angle <- data$angle
#----------------------------------------------------------------
# Restrict the timestamps to 10 minute steps:
m <- seq(from = which.max(format(t[601:length(t)],"%M:%S")=="00:00"),
to = length(t),
by = 600 )
#----------------------------------------------------------------
# Calculate 10 minute statistics:
Y <- timeSeries(data.frame(
speed_avg = sapply(m,function(m){mean(na.omit(X$speed[(m-599):m]))}),
speed_sd = sapply(m,function(m){sd(na.omit(X$speed[(m-599):m]))}),
speed_min = sapply(m,function(m){min(na.omit(c(X$speed[(m-599):m],Inf)))}),
speed_max = sapply(m,function(m){max(na.omit(c(X$speed[(m-599):m],-Inf)))}),
angle_avg = sapply(m,function(m){mean(na.omit(X$angle[(m-599):m]))})))
setTime(Y) <- t[m]
Y <- Y[complete.cases(Y),]
write.table(Y,filename_10min)
由於大量的數據是必要的,我用下面的腳本來創建示例數據:
library(timeDate)
#######################################################################
# Create example data
set.seed(1)
t_start <- as.timeDate("2015-01-01 00:00:00")
t_end <- as.timeDate("2015-01-03 13:00:00")
t <- timeSequence(t_start,t_end,by="sec")
data <- data.frame(date = format(t,"%Y-%m-%d"),
time = format(t,"%H:%M:%S.00"),
speed = 6 + sin((1:length(t))/500) + sample(-10:10,length(t),replace=TRUE)/15,
angle = sample(-900:900,length(t),replace=TRUE)/10)
# Some values are missing:
data[8823:11580,] <- NA
data[13585:18801,] <- NA
data[sample(1:nrow(data),0.1*nrow(data)),] <- NA
data <- na.omit(data)
write.table(data, filename, quote=FALSE, row.names=FALSE)
好像我不能編輯我自己的問題...: - /我忘了提到我在使用R.我不允許給出更具體的標籤,因爲我沒有製作新標籤的聲望。 –