【发布时间】:2012-06-27 04:19:41
【问题描述】:
尝试在没有 For 循环的情况下执行此操作,但无法解决。
我想用默认值 0.0000001 替换列中的第一个 NA。
我正在进行最后一次观察结转 (LOCF) 插补,但想给它一个默认值。
如果我有以下data.frame:
> Col1 Col2 Col3 Col4
> 1 NA 10 99
> NA NA 11 99
> 1 NA 12 99
> 1 NA 13 NA
我希望它看起来像这样:
> Col1 Col2 Col3 Col4
> 1 0.0000001 10 99
> 0.0000001 NA 11 99
> 1 NA 12 99
> 1 NA 13 0.0000001
这是我拥有的代码,但很慢......
#Temporary change for missing first observation
for (u in 1:ncol(data.frame))
{
for (v in 1:nrow(data.frame))
{
#Temporary change the first observations in a row to 0.0000001 until it encounters a value that isn't NA
if(is.na(temp_equity_df_merge2[v,u]))
{
temp_equity_df_merge2[v,u]=0.0000001
}
else break
}
我想使用 apply 或一些更快的变体。我正在循环超过 20 列和 100 万行。
提前感谢您的帮助。
【问题讨论】:
-
既然你提到了LOCF,你可能对
library('zoo'); ?na.locf感兴趣 -
我很感激。这就是我正在使用的,但如果第一个观察结果是空白的,它会忽略它(例如,它不会为第 2 列返回任何内容)。此外,它似乎只在每一列上单独工作,所以当我之后使用 cbind 时,它们的列将具有不同的长度。
标签: performance r for-loop apply na