将矩阵中每个等于 0 的元素替换为上一行的相应元素

标签 r matrix data-analysis data-manipulation

我正在使用 R。我有一个矩阵,我想将其中每个等于 0 的元素替换为上面行的相应元素。

例如,我创建了以下矩阵:

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。 我想要一个能够对矩阵的每个元素执行此操作的函数。

最佳答案

我们可以找到矩阵('i1')中为 0 的元素的行/列索引,然后通过从 row 索引中减去 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)

关于将矩阵中每个等于 0 的元素替换为上一行的相应元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35384492/

相关文章:

Matlab:4维矩阵中的平均值

python - 分组和平均 NumPy 矩阵

python - 使用 pandas group by 从最大到最小的顺序排序

Python - 使用 Numpy 进行相关性测试

在交互式 R session 中从 Shiny 的应用程序返回值

r - 如何将所有子列表元素组合到一个列表中

r - 在 R 中创建动画

r - 在 Shiny 中上传许多文件

r - 提取矩阵的每第 N 个元素

python - 如何高效地执行循环语句进行数据分析?