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