【问题标题】:How can I delete columns of a matrix based on row values in R?如何根据 R 中的行值删除矩阵的列?
【发布时间】:2021-03-29 06:17:54
【问题描述】:

在这个方阵中,我想查找第一列中的所有非零值,并删除与非零值的行名对应的列。然后我想查找下一个未删除的列并重复相同的过程,并重复此操作直到到达最后一列。 有什么建议吗?

矩阵示例

添加了一个不是图片的例子

newt <- matrix(c(0,1,0,0,1,0,0,1,0,0,0,1,0,1,0,1), nrow = 4, ncol = 4)
colnames(newt) <- c("1", "2", "3", "4")

只应保留第 1 列和第 3 列

【问题讨论】:

    标签: r matrix


    【解决方案1】:

    您可以利用这个while 循环:

    rowname <- rownames(newt)
    vec <- colnames(newt)
    i <- 1
    col <- vec[i]
    
    while(i < length(vec)) {
      vec <- setdiff(vec, rowname[newt[, col] == 1])
      i <- i + 1
      col <- vec[i]
    }
    result <- newt[, vec]
    result
    
    #  1 3
    #1 0 0
    #2 1 0
    #3 0 0
    #4 0 1
    

    数据

    newt <- matrix(c(0,1,0,0,1,0,0,1,0,0,0,1,0,1,0,1), nrow = 4, ncol = 4)
    colnames(newt) <- c("1", "2", "3", "4")
    rownames(newt) <- c("1", "2", "3", "4")
    

    【讨论】:

      猜你喜欢
      • 2018-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-25
      • 1970-01-01
      • 2011-10-13
      • 2021-10-05
      相关资源
      最近更新 更多