将第i列中的矩阵/数据帧值替换为向量的第i个元素

假设您有一个3乘3的矩阵m,其中包含一个或多个零,并且您希望将每个零替换为给定的数字.

替换必须遵循以下规则:

如果在m的第一列上找到零,则应将其替换为向量v的第一个元素,如果在m的第二列上找到零,则应将其替换为向量v的第二个元素,并且第三列/向量元素相同.

矩阵和向量是:

m <- matrix(c(0,2,3,4,0,6,0,8,0), 3, 3, byrow = TRUE)
v <- c(1,5,9)

当然,v的长度必须与m的列数相匹配.所以矩阵是这样的:

0 2 3
4 0 6
0 8 0

我希望每当R在m的第一列中找到零时,它就会用向量v的第一个元素替换它,依此类推,这样最终的结果将是:

1 2 3
4 5 6
1 8 9

我已经做了很多研究,并没有找到解决这个问题的方法.有人可以帮忙吗?

最佳答案
我认为您提出的解决方案是错误的,这是解决您文本中描述的问题的方法.当使用.arr.ind = TRUE调用它时,它返回一个两列矩阵,可用于矩阵或数据帧索引,如i,i reference.在这种情况下,您还可以使用其第二列作为v-object的索引.

> m[ which(m==0, arr.ind=TRUE) ] <- v[ which(m==0, arr.ind=TRUE)[,2] ]
> m
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6
[3,]    1    8    9

转载注明原文:将第i列中的矩阵/数据帧值替换为向量的第i个元素 - 代码日志