【问题标题】:List with position of certain values of a matrix列出矩阵的某些值的位置
【发布时间】:2017-04-02 20:20:50
【问题描述】:

我有一个包含1 和0 的矩阵。例如:

M1 = matrix(c(1, 0, 1, 0, 1, 0), nrow=2, ncol=3, byrow = TRUE)
row.names(M1) <- c(100, 101)
colnames(M1) <- c("A", "B", "C")
M1

    A B C
100 1 0 1
101 0 1 0

现在我想使用以下语法创建矩阵中所有values=1 的列表:

"row name"."column name", value

在此示例中,我正在寻找的解决方案是:

100.A, 1
100.C, 1
101.B, 1

【问题讨论】:

    标签: r list matrix


    【解决方案1】:

    试试这个:

    paste0(row.names(M1==1), ".", colnames(M1==1))
    

    或者如果你想加1:

    data.frame(result = paste0(row.names(M1==1), ".", colnames(M1==1), ", 1"))
    

    编辑:1 多于 1 次时更正

    result <- list()
    for (i in 1:nrow(M1)){
      result[[i]] <- data.frame(result = paste0(rep(row.names(M1)[i], length(colnames(M1)[M1[i,]==1])), ".", colnames(M1)[M1[i,]==1], ", 1"))
    }
    result <- do.call(rbind, result)
    result <- unique(result)
    

    【讨论】:

    • 感谢您的输入!但我认为如果矩阵有另一种结构,它就行不通。例如,如果列中有多个值等于 1
    【解决方案2】:

    试试这个:

    x <- which(M1==1, arr.ind = TRUE)
    data.frame(COL=paste0(rownames(M1)[x[,1]], ".", colnames(M1)[x[,2]], ", ", 1))
    
    #       COL
    #1 100.A, 1
    #2 101.B, 1
    #3 100.C, 1
    

    【讨论】:

      猜你喜欢
      • 2015-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多