Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 用上一行的对应元素替换矩阵中等于零的每个元素_R_Matrix_Data Analysis_Data Manipulation - Fatal编程技术网

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来提取与上

我用的是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来提取与上面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)