簡體   English   中英

在R中的矩陣中搜索對

[英]Searching pairs in matrix in R

我對R很陌生,所以如果有人可以幫助我,我將不勝感激:)

我有一個很大的矩陣,例如: 矩陣和基因載體。 我的任務是逐行搜索矩陣,然后將包含突變的基因對(在矩陣上為D707H)與載體中包含的其余基因一起編譯,並將其添加到新矩陣中。 我試圖用循環做到這一點,但我不知道如何正確地編寫它。 對於這個矩陣,它看起來應該像這樣:

    PR.02.1431    
    NBN BRCA1
    NBN BRCA2
    NBN CHEK2
    NBN ELAC2
    NBN MSR1
    NBN PARP1
    NBN RNASEL

現在我有這樣的事情: 我的想法

“ a”是我的初始矩陣。

誰能指出我正確的方向? :)

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

一些示例數據,以進行演示:

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 您可以嘗試:

which(! is.na(mtx) & ! is.nan(mtx))
# [1] 17 19 57 70

但這在檢索行/列對時並不總是很直觀(我想是基因嗎?)。 請嘗試:

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

如何使用:整數分別是行索引和列索引。 假設矩陣使用行名和列名,則可以使用以下方法檢索行名:

rownames(mtx)[ ind[,"row"] ]
# [1] "g" "i" "g" "j"

(精明的讀者可能會建議我改用rownames(ind) 。它確實可以工作!)對於colnames"col"

有趣的是,即使ind本身就是一個矩陣,您也可以使用以下方法相當容易地對mtx進行子集化:

mtx[ind]
# [1] "x4" "x1" "x3" "x2"

將所有三個結合在一起,您可能可以使用:

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

我知道我的老師在哪里,現在我有了矩陣。 分析您的代碼效果很好,但這並不是我想要的。 a,b,c,d等是生物,行名是基因(A,B,C,D等)。 我必須將其中一對(在同一列中)具有除NA值以外的其他基因配對。 例如,如果基因A在列a中的值為= 4,則我必須具有:

   gene1 gene2
a    A     B
a    A     C
a    A     D
a    A     E   

我以這種方式嘗試過,但是元素數量不匹配,我也不知道該如何解決。

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中執行此操作嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM