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



我有一个函数,它接受一个包含三列的矩阵。第三列是二进制的。如果第三列的值为 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。

最新更新