n 일 전의 xts 객체에서 데이터 행을 가져와 n 개의 마침표 행이 없거나 NA
으로 채워진 경우 역으로 건너 뜁니다.NA 및 NULL 행을 가로 질러 xts 롤백
다음은 데이터 세트의 예입니다.
require(xts)
set.seed(1)
ddf <- data.frame('1m' = rnorm(25), '3m' = rnorm(25))
xxd <- xts(ddf, seq(as.Date('2013-07-27'), length.out = 25, by='day'))
xxd[sample(1:25, 8), ] <- NA
xxd <- xxd[-sample(1:25, 3), ]
xts
객체 xxd
는 19 년 8 월이나 8월 18일이없는 17 팔월 모든 NA
, 그래서 내가 사용이 얻을 함께 뭔가를 해킹 한이 작업을 수행하려면 8월을 다시 16 싶어 환경에 할당함으로써,하지만 이것은 매우 R
(또는 매우 기능적으로 보이지 않습니다.) -이 작업을 수행하는 적절한 방법은 무엇입니까?
rewindX <- function(Xts, dayRew = 1)
{
flipDates <- function(dayRew)
{
assign('newX', Xts[index(last(Xts)) - dayRew], envir = outXenv)
if(!length(which(!is.na(outXenv$newX))))
{
dayRew <- dayRew + 1
flipDates(dayRew)
}
}
outXenv <- new.env(parent = .GlobalEnv)
flipDates(dayRew)
return(outXenv$newX)
}
는 그래서
rewindX(xxd, 1)
을주고 되감기 행을 얻었다.
> rewindX(xxd, 1)
X1m X3m
2013-08-16 0.9189774 -0.7074952
> rewindX(xxd, 10)
X1m X3m
2013-08-08 -0.6212406 -0.0593134
당신의지도가 크게 감사 :
는 다음 두 가지 예입니다.
만약 날짜가 존재하지 않으면 어떻게됩니까? 이 사건을 커버하지 않는 것 같습니다. – ricardo
@ricardo 알아요. xts 객체를 누락 된 날짜가 포함 된 벡터와 병합하기 쉽습니다. '## 새로운 인덱스 사용 new.index <- seq (min (index (x)), max (인덱스 (x)), by = as.difftime (1, units = 'days')); x <- merge (x, xts (NULL, new.index))'그렇다면'na.locf'를 적용하십시오 ... – agstudy
솔직히 말해서, 저는 제 솔루션에 keener입니다. 이 문제를 불쾌하게하기 위해'na.locf'와'merge '를 사용하는 것은 비용이 많이 드는 것처럼 보입니다. 나는 환경에 배정하는 것이'R'/functional처럼 보이지 않는지 묻고있다. 더 좋은 방법이있을거야? – ricardo