将矩阵中等于零的每个元素替换为上一行的相应元素
Replace each element equal to zero of a matrix with the corresponding element of the row above
我正在使用 R。我有一个矩阵,我想用上面一行的相应元素替换它等于零的每个元素。
例如,我创建了以下矩阵:
AA <- matrix(c(1,2,3,1,4,5,1,0,2), ncol=3, nrow=3)
[,1] [,2] [,3]
[1,] 1 1 1
[2,] 2 4 0
[3,] 3 5 2
我想用元素 AA[1,3] 替换 0。
我想要一个能够为矩阵的每个元素执行此操作的函数。
我们可以找到矩阵中为0的元素的row/column索引('i1'),然后通过从[=13=中减去1来提取对应于上面1行的元素] 中的索引 'i1' 并替换原来的值。
i1 <- which(!AA, arr.ind=TRUE)
AA[i1] <- AA[cbind(i1[,1]-1,i1[,2])]
或者在将“0”更改为 NA
后,单行代码将使用 library(zoo)
中的 na.locf
library(zoo)
na.locf(replace(AA, !AA, NA))
如果我们编码高尔夫,一个更紧凑的选择是
na.locf(AA*NA^!AA)
我正在使用 R。我有一个矩阵,我想用上面一行的相应元素替换它等于零的每个元素。
例如,我创建了以下矩阵:
AA <- matrix(c(1,2,3,1,4,5,1,0,2), ncol=3, nrow=3)
[,1] [,2] [,3]
[1,] 1 1 1
[2,] 2 4 0
[3,] 3 5 2
我想用元素 AA[1,3] 替换 0。 我想要一个能够为矩阵的每个元素执行此操作的函数。
我们可以找到矩阵中为0的元素的row/column索引('i1'),然后通过从[=13=中减去1来提取对应于上面1行的元素] 中的索引 'i1' 并替换原来的值。
i1 <- which(!AA, arr.ind=TRUE)
AA[i1] <- AA[cbind(i1[,1]-1,i1[,2])]
或者在将“0”更改为 NA
后,单行代码将使用library(zoo)
中的 na.locf
library(zoo)
na.locf(replace(AA, !AA, NA))
如果我们编码高尔夫,一个更紧凑的选择是
na.locf(AA*NA^!AA)