首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在R中的矩阵中搜索对

在R中的矩阵中搜索对
EN

Stack Overflow用户
提问于 2017-04-16 01:55:20
回答 2查看 102关注 0票数 0

我对R比较陌生,所以如果有人能帮助我,我将不胜感激:)

我有一个很大的矩阵,例如:matrix和一个基因向量。我的任务是逐行搜索矩阵,将具有突变的基因对(在矩阵上是D707H)与载体中包含的其余基因进行编译,并将其添加到新的矩阵中。我试过用循环来做这件事,但我不知道如何正确地编写它。对于这个矩阵,它应该看起来像这样:

代码语言:javascript
复制
    PR.02.1431    
    NBN BRCA1
    NBN BRCA2
    NBN CHEK2
    NBN ELAC2
    NBN MSR1
    NBN PARP1
    NBN RNASEL

现在我有了这样的东西:my idea

"a“是我的初始矩阵。

谁能给我指个方向?:)

EN

回答 2

Stack Overflow用户

发布于 2017-04-16 12:16:46

也许您想要/需要的是which(..., arr.ind = TRUE)

以下是一些示例数据,用于演示:

代码语言:javascript
复制
set.seed(2)
n <- 10
mtx <- array(NA, dim = c(n, n))
dimnames(mtx) <- list(letters[1:n], LETTERS[1:n])
mtx[sample(n*n, size = 4)] <- paste0("x", 1:4)
mtx
#   A  B    C  D  E  F    G    H  I  J 
# a NA NA   NA NA NA NA   NA   NA NA NA
# b NA NA   NA NA NA NA   NA   NA NA NA
# c NA NA   NA NA NA NA   NA   NA NA NA
# d NA NA   NA NA NA NA   NA   NA NA NA
# e NA NA   NA NA NA NA   NA   NA NA NA
# f NA NA   NA NA NA NA   NA   NA NA NA
# g NA "x4" NA NA NA "x3" NA   NA NA NA
# h NA NA   NA NA NA NA   NA   NA NA NA
# i NA "x1" NA NA NA NA   NA   NA NA NA
# j NA NA   NA NA NA NA   "x2" NA NA NA

在您的例子中,您似乎想要任何不是NANaN的东西。您可以尝试:

代码语言:javascript
复制
which(! is.na(mtx) & ! is.nan(mtx))
# [1] 17 19 57 70

但在检索行/列对(我认为是基因?)时,这并不总是直观的。相反,尝试:

代码语言:javascript
复制
ind <- which(! is.na(mtx) & ! is.nan(mtx), arr.ind = TRUE)
ind
#   row col
# g   7   2
# i   9   2
# g   7   6
# j  10   7

如何使用:整数分别是行索引和列索引。假设您的矩阵使用行名和列名,您可以使用以下命令检索行名:

代码语言:javascript
复制
rownames(mtx)[ ind[,"row"] ]
# [1] "g" "i" "g" "j"

(一个精明的读者可能会建议我改用rownames(ind)。它当然是有效的!)colnames"col"也是如此。

有趣的是,即使ind本身是一个矩阵,您也可以使用以下命令轻松地设置mtx的子集:

代码语言:javascript
复制
mtx[ind]
# [1] "x4" "x1" "x3" "x2"

将这三者结合在一起,您可能能够使用:

代码语言:javascript
复制
data.frame(
  gene1 = rownames(mtx)[ ind[,"row"] ],
  gene2 = colnames(mtx)[ ind[,"col"] ],
  val = mtx[ind]
)
#   gene1 gene2 val
# 1     g     B  x4
# 2     i     B  x1
# 3     g     F  x3
# 4     j     G  x2
票数 0
EN

Stack Overflow用户

发布于 2017-04-17 19:47:27

我知道我的目标在哪了,现在我有矩阵了。分析你的代码,它工作得很好,但这并不是我想要做的。a、b、c、d等是有机体,行名是基因(A、B、C、D等)。我必须对其中一个(在同一列中)具有NA值以外的其他值的基因对进行cobine。例如,如果基因A在a列中有value=4,我必须有:

代码语言:javascript
复制
   gene1 gene2
a    A     B
a    A     C
a    A     D
a    A     E   

我尝试了这种方法,但是元素的数量不匹配,我不知道如何解决这个问题。

代码语言:javascript
复制
ind= which(! is.na(a) & ! is.nan(a), arr.ind = TRUE)
ind1=which(macierz==1,arr.ind = TRUE)
ramka= data.frame(
  kolumna = rownames(a)[ ind[,"row"] ],
  gene1 = colnames(a)[ ind[,"col"] ],
  gene2 = colnames(a)[ind1[,"col"]],
  #val = macierz[ind]
)

你知道在R中怎么做吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43429395

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档