从R中的矩阵中提取信息

时间:2015-10-09 13:02:45

标签: r matrix

我有一个像这样的布尔矩阵:

      1     2     3     4     5
1  TRUE FALSE  TRUE FALSE FALSE
2 FALSE  TRUE FALSE FALSE FALSE
3  TRUE FALSE  TRUE FALSE FALSE
4 FALSE FALSE FALSE  TRUE  TRUE
5 FALSE FALSE FALSE  TRUE  TRUE

我需要获取TRUE值的行号和列号。但是,行号等于列号的值应该丢弃,例如(1,1) (2,2)...。此外,由于在矩阵(m,n) = (n,m)中,我只需要该对中的一个值,例如只需要(4,5),而不是(5,4)

例如,我可以将值输入到这样的矩阵中:

    [,1]  [,2]
[1,]   1     3
[2,]   4     5

我已尝试过which(),但不知道如何过滤结果。任何建议表示赞赏。谢谢!

2 个答案:

答案 0 :(得分:1)

这是您的reproducible example

m <- as.matrix(
      read.table(text = "      1     2     3     4     5
                         1  TRUE FALSE  TRUE FALSE FALSE
                         2 FALSE  TRUE FALSE FALSE FALSE
                         3  TRUE FALSE  TRUE FALSE FALSE
                         4 FALSE FALSE FALSE  TRUE  TRUE
                         5 FALSE FALSE FALSE  TRUE  TRUE")
     )

m[lower.tri(m, diag=TRUE)] <- FALSE # you want to ignore row index >= col index

which(m, arr.ind=TRUE) # returns the TRUEs from the upper triangle

返回:

  row col
1   1   3
4   4   5

答案 1 :(得分:1)

你也可以这样做:

df = data.frame(row=rep(1:(nrow(m)-1),(nrow(m)-1):1),
                col=unlist(sapply(2:ncol(m), function(i) i:ncol(m))))

df[m[upper.tri(m)],]
#   row col
#2    1   3
#10   4   5