【问题标题】:Replace each element equal to zero of a matrix with the corresponding element of the row above将矩阵中等于 0 的每个元素替换为上面行的对应元素
【发布时间】:2016-05-24 21:28:37
【问题描述】:

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

【问题讨论】:

    标签: r matrix data-analysis data-manipulation


    【解决方案1】:

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

    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)
    

    【讨论】:

    • 你认为使用 ifelse 函数也可以吗?
    • @LucaDibo 有可能,但我认为ifelse 与行/列索引相比会稍慢。
    • 能否请你也给我看一下带有 if else 函数的代码(即使它比你的慢)?
    • @LucaDibo Josliber 已经发布了ifelse 解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-15
    • 1970-01-01
    • 1970-01-01
    • 2015-07-09
    • 1970-01-01
    • 2013-03-14
    • 1970-01-01
    相关资源
    最近更新 更多