gpt4 book ai didi

r - R 中的多次 for 循环时间计算非常高

转载 作者:行者123 更新时间:2023-12-02 06:26:49 25 4
gpt4 key购买 nike

我有以下形式的机器数据行数 - 900k

数据

          A   B   C   D   E   F   G   H   I   J   K   L   M   N
---- -- --- ---- --- --- --- --- --- --- --- --- --- ---
1 1 1 1 1 1 1 1 1 1 0 1 1 0 0
2 0 0 0 0 1 1 1 0 1 1 0 0 1 0
3 0 0 0 0 0 0 0 1 1 1 1 1 0 0

1 表示机器处于事件状态,0 表示它处于非事件状态。

我希望我的输出看起来像

          A   B   C   D   E   F   G   H   I   J   K   L   M   N
---- -- --- ---- --- --- --- --- --- --- --- --- --- ---
1 1 1 1 1 1 1 1 1 1 1 1 1 0 0
2 0 0 0 0 1 1 1 1 1 1 0 0 1 0
3 0 0 0 0 0 0 0 1 1 1 1 1 0 0

基本上我要做的就是在特定行中寻找零,如果该零的两边都被一个包围,则将 0 替换为 1

例子-

在第 1 行中,J 列中有零但你在 I 和 K 列中也有 1这意味着我将 0 替换为 1,因为它被 1 包围

我使用的代码是这样的

  for(j in 2:13) {
if(data[i,j]==0 && data[i,j-1]==1 && data[i,j+1]==1){
data[i,j] = 1
}
}
}

有没有办法减少这个的时间计算?这需要我将近 30 分钟才能在 R 中运行。如有任何帮助,我们将不胜感激。

最佳答案

这更快,因为它不需要遍历行。

for(j in 2:13) {
data[,j] = ifelse(data[,j-1] * data[,j+1]==1,1,data[,j])
}

或者更优化一点,不使用 ifelse

for(j in 2:(ncol(data) - 1)) {
data[data[, j - 1] * data[, j + 1] == 1, j] <- 1
}

关于r - R 中的多次 for 循环时间计算非常高,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58208275/

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