Я хочу реализовать "Last Observed Carried Forward" для набора данных, над которым я работаю, у которого в конце его нет значений.
Вот простой код для этого (вопрос после него):
LOCF <- function(x)
{
# Last Observation Carried Forward (for a left to right series)
LOCF <- max(which(!is.na(x))) # the location of the Last Observation to Carry Forward
x[LOCF:length(x)] <- x[LOCF]
return(x)
}
# example:
LOCF(c(1,2,3,4,NA,NA))
LOCF(c(1,NA,3,4,NA,NA))
Теперь это отлично работает для простых векторов. Но если я попытаюсь использовать его в кадре данных:
a <- data.frame(rep("a",4), 1:4,1:4, c(1,NA,NA,NA))
a
t(apply(a, 1, LOCF)) # will make a mess
Он превратит мой фрейм данных в матрицу символов.
Можете ли вы придумать способ сделать LOCF на data.frame, не превращая его в матрицу? (Я мог бы использовать петли и т.д., Чтобы исправить беспорядок, но хотел бы получить более элегантное решение)
Приветствия,
Таль