用上面行的相应元素替换矩阵的等于零的每个元素

时间:2016-02-13 19:39:11

标签: r matrix data-analysis data-manipulation

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

1 个答案:

答案 0 :(得分:2)

我们可以在矩阵('i1')中找到元素的行/列索引,然后通过从'i1'中的row索引中减去1来提取对应于上面1行的元素并替换原始值。

i1 <- which(!AA, arr.ind=TRUE)
AA[i1] <- AA[cbind(i1[,1]-1,i1[,2])]

或者,在将“0”更改为“NA”后,单行将使用na.locf中的library(zoo)

library(zoo)
na.locf(replace(AA, !AA, NA))

如果我们编码高尔夫,那么更紧凑的选择就是

na.locf(AA*NA^!AA)