【发布时间】:2013-02-15 17:33:42
【问题描述】:
我想测试特定列中的值是否包含 NA 值,如果是,则用上一行中的值填充该 NA 空间。我仍在尝试掌握 apply 系列函数的窍门。
例如我想转这个:
Date Balance
2012-01-01 1000
2012-01-02 NA
2012-01-03 NA
2012-01-04 1200
2012-01-05 1215
2012-01-06 NA
进入:
Date Balance
2012-01-01 1000
2012-01-02 1000
2012-01-03 1000
2012-01-04 1200
2012-01-05 1215
2012-01-06 1215
【问题讨论】:
-
看看来自 zoo 包的
na.locf -
很高兴找到@Jilber。
apply系列在这里不能很好地工作,因为您想要对给定值执行的操作取决于附近的值(即,您不能在apply函数中使用索引)。 -
最简单的
base方法可能是for循环(如果我错了,请纠正我):for (i in 1:length(DF$Balance)) if (is.na(DF$Balance[i])) DF$Balance[i] = DF$Balance[i-1] -
@SeñorO 该 for 循环适用于该特定列 (
DF$Balance) 中的每个观察 (i),但是如果您希望它遍历每一行中的每一列,您将如何做而不是每一行? -
@coip 你只需要做两个 for 循环,但此时你真的应该得到 zoo 包并使用下面提到的
na.locf,它会自动处理所有列给你