でループに使用して回避するRcppを使用する方法を次のようになります任意の列または行の要素にはパターンが存在しない私はXTSフォーマットデータ(データ)を有する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秒」という新しい列を作成しています。列「1秒」に対して、各行について、そのxts時間オブジェクトに従って次の1秒以内に次の観測を探し、その行の「A」値を記録したい。次の秒以内に観測がなければ、その行の$ 1秒のデータにNAを入れます。
同様に、「3秒」の列については、各行について、そのxts時間オブジェクトに従って次の3秒以内に先頭の観測を探したいと思います。次の3秒以内に同じタイムスタンプを持つ複数の行がある場合は、最後の観測のみを使用します。
次の3秒以内に何も観察されない場合は、その行に$ 3秒のデータを入れます。 は例えば、私は次のような結果を期待する:
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]])]
}
}
}
forループを使用しないようにRcppを使用できるかどうかは疑問です。助けてくれてありがとう。
[競争指標を計算するループを回避する方法](https://stackoverflow.com/questions/42020341/how-to-avoid-a-loop-to-calculate-competition-index) – Mateusz1981