에서 루프를 사용하지 않는 것이 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'값을 기록하려고합니다. 다음 초 내에 아무런 관찰이 없다면 NA에 해당 행의 $ 1 초를 넣으십시오.
마찬가지로 "3 초"열의 경우 각 행에 대해 xts 시간 객체에 따라 다음 3 초 내에 선행 관찰을 찾고 싶습니다. 다음 3 초 내에 동일한 시간 소인이있는 행이 여러 개있는 경우 마지막 관찰 만 사용하십시오.
다음 3 초 내에 아무런 관찰이 없다면 NA에 그 행에 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