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