我希望为我正在处理的数据集实施“最后一次观察结转”,该数据集的末尾有缺失值。
这是一个简单的代码(后面的问题):
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
它将我的数据框变成一个字符矩阵。
你能想出一种在 data.frame 上做 LOCF 而不把它变成矩阵的方法吗?(我可以使用循环等来纠正混乱,但希望有一个更优雅的解决方案)