我有一个像这样的布尔矩阵:
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()
,但不知道如何过滤结果。任何建议表示赞赏。谢谢!
答案 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