2016-01-21 61 views
-1

我有一個矩陣,其中的colnames是樣本名稱,我創建了一個colnames向量。以不同的順序比較兩個向量並獲得匹配的位置

我也有一個我需要從矩陣子集中找到的樣本名稱的向量,我發現它與矩陣的列名不同。

對於矩陣的子集,我需要找到矩陣中哪些列對應於我需要的樣本。

爲了說明這一點:

colnames <- c("A","B","C","D","E","F","G","H","I") 

sample_names<- c("B","D","I") 

我需要一種方式來獲得R返回的位置信息,使得用於例如樣品名稱「B」,「d」,「I」,則colnames位置是:[1] 2 4 9

+0

'這(colnames == sample_names)'? (如果是矩陣m的子集:'m [,colnames(m)== sample_names]'應該也足夠了(在邏輯向量之後) – Tensibai

+0

你需要「匹配位置」,但是你沒有嘗試匹配(C,B,C,D,E,F,B, G「,」H「,」I「))''給出'[1] 2 4 9' ... – Cath

+0

因爲我是R新手,我沒有意識到命令存在。它在最後。謝謝你的回覆 –

回答

0

樣本數據:

> m=matrix(rep(1:4,3),ncol=4) 
> colnames(m)<-c("A","C","D","B") 
> m 
    A C D B 
[1,] 1 4 3 2 
[2,] 2 1 4 3 
[3,] 3 2 1 4 

> vec<-c("A","B") 
> vec 
[1] "A" "B" 

爲了回答您的確切的問題,使用which,它將返回一個邏輯矢量TRUE值的索引。

> which(colnames(m)==vec) 
[1] 1 4 

但是作爲你的目標似乎是子集劃分的矩陣,只需直接使用樣本名矢量得到這樣的:

> m[, vec] 
    A B 
[1,] 1 2 
[2,] 2 3 
[3,] 3 4 
+1

實際上只是'm [,vec]'應該做 – Cath

+0

@Cath確實,愚蠢的已經忘記它 – Tensibai

+0

由於某種原因 m [,vec] 沒有將我想要的顏色名稱子集合,而是以隨機順序對前70個顏色名稱進行了子集化,這與我的列表中的樣品數量相同。 匹配函數最終回答了我的問題,然後我使用了子集的位置。 –