使用循環我有一個XTS格式的數據(數據)是這樣的:如何使用RCPP避免r中
A
2008-01-14 09:29:59 10
2008-01-14 09:29:59 0.1
2008-01-14 09:30:00 0.9
2008-01-14 09:30:00 0.1
2008-01-14 09:30:00 0.2
2008-01-14 09:30:00 0.4
2008-01-14 09:30:00 0.6
2008-01-14 09:30:00 0.7
2008-01-14 09:30:02 1.5
2008-01-14 09:30:06 0.1
2008-01-14 09:30:06 0.1
2008-01-14 09:30:07 0.9
2008-01-14 09:30:07 0.2
2008-01-14 09:30:10 0.4
2008-01-14 09:30:10 0.3
2008-01-14 09:30:25 1.5
沒有任何列或行元素無圖案。
數據由POSIXct類對象索引。我正在創建名爲'1秒','3秒'的新列。對於'1second'列,我想根據它們的xts時間對象在下一個1秒內找到下一個觀測值並記錄該行的'A'值。如果在接下來的秒內沒有觀察到,則在該行中將NA放置在數據$ 1秒內。
同樣,對於列「3秒」,對於每一行,我想根據它們的xts時間對象在接下來的3秒內找到前導觀察值。如果在接下來的3秒內有多個具有相同時間標記的行,則僅使用最後一次觀察。
如果在接下來的3秒內沒有觀察到,則在該行的數據$ 3秒內放置NA。 例如,我希望下面的結果:
B 1second 3second
2008-01-14 09:29:59 10 0.7 1.5
2008-01-14 09:29:59 0.1 0.7 1.5
2008-01-14 09:30:00 0.9 NA 1.5
2008-01-14 09:30:00 0.1 NA 1.5
2008-01-14 09:30:00 0.2 NA 1.5
2008-01-14 09:30:00 0.4 NA 1.5
2008-01-14 09:30:00 0.6 NA 1.5
2008-01-14 09:30:00 0.7 NA 1.5
2008-01-14 09:30:02 1.5 NA NA
2008-01-14 09:30:06 0.1 0.2 0.2
2008-01-14 09:30:06 0.1 0.2 0.2
2008-01-14 09:30:07 0.9 NA 0.3
2008-01-14 09:30:07 0.2 NA 0.3
2008-01-14 09:30:10 0.4 NA 0.3
2008-01-14 09:30:10 0.3 NA NA
2008-01-14 09:30:25 1.5 NA NA
這裏是我當前的代碼,它的工作原理,但速度很慢。
TimeStmp is the POSIXct object.
TimeHorizon<-c(1,3)
for(j in 1:nrow(data)){
a<-sapply(TimeHorizon,function(x) which(TimeStmp==TimeStmp[j] +x))
for(k in 1:length(a)){
if (length(a[[k]]>0)){
data[j,k+1]<-(data$B)[last(a[[k]])]
}
}
}
我想知道是否可以使用Rcpp避免使用for循環。十分感謝你的幫助。
可能重複[如何避免循環計算競爭指數](https://stackoverflow.com/questions/42020341/how-to-avoid-a-loop-to-calculate-competition-index) – Mateusz1981