【问题标题】:R: Loop through matrix, delete cells based on criteriaR:遍历矩阵,根据标准删除单元格
【发布时间】:2018-03-17 16:58:34
【问题描述】:

如果前一列中的单元格为 NA,我正在尝试遍历矩阵并将单元格值更改为 NA。

它是一个有 9 列和 57772 行的大矩阵。尝试了不同的 for for 循环,但我似乎无法正确处理。

简而言之,就是这个矩阵。

m <- structure(c("X","X","X","X","X","X", NA, "X", "X", NA, NA, "X", "X", NA, NA, "X", "X", 
             NA, NA, NA, "X", NA, NA, NA, "X"), .Dim = c(5L, 5L), .Dimnames = list(
               NULL, c("1", "2", "3", "4","5")))

应该变成这个

      1   2   3   4   5  
[1,] "X" "X" NA  NA  NA
[2,] "X" NA  NA  NA  NA 
[3,] "X" "X" "X" NA  NA 
[4,] "X" "X" NA  NA  NA 
[5,] "X" NA  NA  NA  NA 

但是有了这个循环

for(j in ncol(m):2) m[, j] <- ifelse(is.na(m[, j-1]), NA, m[, j])

只会变成这个

      1   2   3   4   5  
[1,] "X" "X" NA  NA  "X"
[2,] "X" NA  NA  "X" NA 
[3,] "X" "X" "X" NA  NA 
[4,] "X" "X" NA  NA  NA 
[5,] "X" NA  NA  NA  NA

【问题讨论】:

    标签: r loops for-loop matrix


    【解决方案1】:

    一个简单的循环就足够了。

    for(j in 2:ncol(m) m[, j] <- ifelse(is.na(m[, j-1]), NA, m[, j])
    

    给予:

         1   2   3   4  5 
    [1,] "X" "X" NA  NA NA
    [2,] "X" NA  NA  NA NA
    [3,] "X" "X" "X" NA NA
    [4,] "X" "X" NA  NA NA
    [5,] "X" NA  NA  NA NA
    

    注意

    可重现形式的输入是:

    m <- structure(c(NA, NA, "X", NA, NA, NA, NA, "X", NA, NA, NA, NA, 
        NA, NA, NA, NA, NA, NA, NA, "X"), .Dim = c(5L, 4L), .Dimnames = list(
        NULL, c("1", "2", "3", "4")))
    

    【讨论】:

    • 感谢您的评论。它不是错误。我更改了我的示例以使其更清楚:如果左侧单元格中没有 X,它应该更改为 NA。
    • 在最后一行的第 2 列中没有 X,因此根据该规则,第 3 列中应该有一个 NA,但该行的第 3 列中有一个 X。
    • 我明白你的意思,但我已经解释得很糟糕了。我已经在上面详细地可视化了它。感谢您迄今为止的帮助!
    • 不清楚的部分是前一列不是指原始矩阵中的前一列而是算法改变后的列。我已经相应地改变了我的答案。
    • 谢谢 G.G.非常感谢
    猜你喜欢
    • 2016-02-12
    • 1970-01-01
    • 2021-11-18
    • 1970-01-01
    • 2020-06-03
    • 1970-01-01
    • 2018-10-04
    • 2021-11-04
    • 2013-04-07
    相关资源
    最近更新 更多