R程序随机将矩阵的第一个值更改为0

R Program changes first value of matrix to 0 randomly

我有一个接受三列矩阵的函数。第三列是二进制的。如果第三列的值为1,我想替换同一行的值,但在第一列为0。

当我创建这个函数时,它将我矩阵的值 [1,1] 更改为 0,我无法弄清楚问题出在哪里。帮助?

replace_if_miss = function(data){ 
    s = 1
    for (i in data[,c(3)]) {
        if (i == 1) {
            data = replace(data, c(s,1), 0)
        }
        s = s+ 1
    } 
    return(data)
}

例如我想要这个:

     x                      
 [1,] 0.4556397 0.4040319   0
 [2,] 0.8851506 0.398007    0
 [3,] 0.2407926 0.006787511 1
 [4,] 0.3375846 0.444135    0
 [5,] 0.1898765 0.2568749   1

更改为:

  x                      
 [1,] 0.4556397 0.4040319   0
 [2,] 0.8851506 0.398007    0
 [3,] 0         0.006787511 1
 [4,] 0.3375846 0.444135    0
 [5,] 0         0.2568749   1

但它变成了这样:

  x                      


 [1,] 0         0.4040319   0
 [2,] 0.8851506 0.398007    0
 [3,] 0         0.006787511 1
 [4,] 0.3375846 0.444135    0
 [5,] 0         0.2568749   1

您可以直接设置值而不是依赖循环:

data[data[, 3] == 1, 1] <- 0

这是在第 3 列中的值为 1 时将第 1 列中的值设置为 0。

我认为您的函数正在用 0 替换 [1, 1],因为当 s 为 1 时,c(s, 1)c(1, 1),即设置为 0。