[R-sig-finance] How can I do this better? (Filling in last traded
price for NA)
Dirk Eddelbuettel
edd at debian.org
Tue Sep 14 02:03:11 CEST 2004
Great email thread in response to Ajay's question! [ I am having some mail
delays at one of the @debian.org mail hosts so I may not have seen all
posts, but I did check the web archive of the list. ]
What is surprising, though, is that nobody looked at _sources_ of its which
has a function locf() to do just this:
#locf-function---------------------------------------------------
locf <- function(x)
{
if (!inherits(x, "its")) stop("function is only valid for objects of class 'its'")
y <- x
jna <- which(apply(is.na(x),2,any))
for(j in jna)
{
y[,j] <- y[most.recent(!is.na(y[,j])),j]
}
return(y)
}
It uses this function
#most.recent-function--------------------------------------------
most.recent <- function(x)
{
# return a vector of indices of the most recent TRUE value (thanks to Tony Plate)
if (!is.logical(x)) stop("x must be logical")
x.pos <- which(x)
if (length(x.pos)==0 || x.pos[1] != 1) x.pos <- c(1, x.pos)
rep(x.pos, c(diff(x.pos), length(x) - x.pos[length(x.pos)] + 1))
}
Would anybody care to time the different approaches we've seen submitted?
Regards,
Dirk
(who, before the list existed, had asked Giles about this)
--
Those are my principles, and if you don't like them... well, I have others.
-- Groucho Marx
More information about the R-sig-finance
mailing list