R 用上一行的对应元素替换矩阵中等于零的每个元素
我用的是R,我有一个矩阵,我想把它的每个元素都换成上面那一行的对应元素 例如,我创建了以下矩阵:R 用上一行的对应元素替换矩阵中等于零的每个元素,r,matrix,data-analysis,data-manipulation,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我们可以找到矩阵('i1')中为0的元素的行/列索引,然后通过从'i1'中的行索引中减去1来提取与上
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我们可以找到矩阵('i1')中为0的元素的行/列索引,然后通过从'i1'中的行
索引中减去1来提取与上面1行对应的元素,并替换原始值
i1 <- which(!AA, arr.ind=TRUE)
AA[i1] <- AA[cbind(i1[,1]-1,i1[,2])]
如果我们编码高尔夫,一个更紧凑的选择是
na.locf(AA*NA^!AA)
您认为使用ifelse函数也可以吗?@LucaDibo也可以,但我认为与行/列索引相比,ifelse
会稍微慢一点。您能给我看一下使用ifelse函数的代码吗(即使它比您的慢一点)?@LucaDibo已经有一个由Josliber发布的ifelse
解决方案。
na.locf(AA*NA^!AA)