我有两个矩阵与下面的例子
row.names geneid1 geneid2 geneid3 geneid4 geneid5
sample1 0.99 8.76 8.78 7.65 5.4
sample2 5.6 6.76 7.4 9.08 8.2
sample4 7.5 6.4 6.4 6.1 8.6
row.names geneid1 geneid2 geneid3 geneid4 geneid5
sample1 0.98 8.76 8.78 4.65 5.4
sample2 0.6 6.76 1.4 9.78 6.2
sample4 9.5 9.4 3.4 5.1 8.0
如果我发现它们与
之间存在相关性 cormat<cor(mat1,mat2)
并且结果矩阵看起来像这样
geneid1 geneid2 geneid3 geneid4 geneid5
geneid1 0.1 0.14 0.58 0.89 0.5
geneid2 0.6 -0.2 0.4 0.45 0.6
geneid3 0.5 0.7 0.3 -0.4 0.76
geneid4 0.65 0.64 0.76 0.45 0.7
geneid5 0.3 0.2 0.6 0.2 0.2
我想在矩阵中选择高于阈值0.5的那些值并省略其余的值。我只想要高于该值rowise和columnwise的基因id号。我尝试使用
which(cormat>0.5)
但我不明白如何使用原始矩阵对它们进行索引,并仅保留那些高于0.5的行和列。除索引之外还有其他方法可以选择高度相关的值进行进一步分析。
答案 0 :(得分:3)
使用参数arr.ind
:
which(cormat>0.5,arr.ind=TRUE)
set.seed(1)
m <- matrix(runif(9),3,3)
m
[,1] [,2] [,3]
[1,] 0.2655087 0.9082078 0.9446753
[2,] 0.3721239 0.2016819 0.6607978
[3,] 0.5728534 0.8983897 0.6291140
which(m < 0.5)
[1] 1 2 5
which(m < 0.5, arr.ind=TRUE)
row col
[1,] 1 1
[2,] 2 1
[3,] 2 2
m[which(m < 0.5, arr.ind=TRUE)]
[1] 0.2655087 0.3721239 0.2016819