gpt4 book ai didi

performance - 在没有 for 循环的情况下查找并替换每列中的第一个 NA

转载 作者:行者123 更新时间:2023-12-01 11:00:35 26 4
gpt4 key购买 nike

试图在没有 For 循环的情况下执行此操作,但无法弄清楚。

我想用默认值 0.0000001 替换列中的第一个 NA。

我正在进行上次观察结转 (LOCF) 插补,但想给它一个默认值。

如果我有以下数据框:

> 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 万行。

提前感谢您的帮助。

最佳答案

您可以对每一列应用一个函数:

myfun <- function(x) {
x[which(is.na(x))[1]] <- 0.1

return(x)
}

> data.frame(apply(dat, 2, myfun))
v1 v2 v3 v4
1 1.0 0.1 10 99.0
2 0.1 NA 11 99.0
3 1.0 NA 12 99.0
4 1.0 NA 13 0.1
>

关于performance - 在没有 for 循环的情况下查找并替换每列中的第一个 NA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11197328/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com