【发布时间】:2020-04-14 15:17:42
【问题描述】:
我的可重现数据看起来像这样-
data <- rnorm(16)
timeStamp <- as.POSIXct("2019-03-18 10:30:00") + 0:15*60
Rf <- xts(x = data, order.by = timeStamp)
colnames(Rf) <- "R"
Rf[4:5]$R <- NA
Rf[8:9]$R <- NA
Rf[13:14]$R <- NA
omit.Rf <- na.omit(Rf)
我的目标是按时间顺序标记连续系列,以下代码有效-
diff.omit.Rf <- diff(index(omit.Rf))
diff.omit.Rf <- append(1, diff.omit.Rf)
initNum <- 1
for (i in 1:length(omit.Rf)){
if (diff.omit.Rf[[i]] == 1){
omit.Rf$opNum[i] <- initNum
} else {
initNum <- initNum + 1
omit.Rf$opNum[i] <- initNum
}
}
我得到了这个输出-
R opNum
2019-03-18 10:30:00 0.89262137 1
2019-03-18 10:31:00 0.50428310 1
2019-03-18 10:32:00 -0.00040488 1
2019-03-18 10:35:00 0.10126335 2
2019-03-18 10:36:00 0.48726498 2
2019-03-18 10:39:00 1.05075049 3
2019-03-18 10:40:00 -0.25495699 3
2019-03-18 10:41:00 0.89257782 3
2019-03-18 10:44:00 -1.25474533 4
2019-03-18 10:45:00 0.55393767 4
不幸的是,当我使用相同的代码创建一个函数时,它会给出以下警告并且不执行该函数。
Error in diff.omit.Rf[[i]] : subscript out of bounds
我制作的函数的代码-
opTimeFun <- function(dataToDeal){
diff.data <- diff(index(dataToDeal))
diff.data <- append(1, diff.data)
initNum <- 1
for (i in 1:length(dataToDeal)){
if (diff.data[[i]] == 1){
dataToDeal$opNum[i] <- initNum
} else {
initNum <- initNum + 1
dataToDeal$opNum[i] <- initNum
}
}
}
有人可以帮忙解决这个问题吗?谢谢
【问题讨论】: