以不同的顺序比较两个向量并获得匹配的位置

时间:2016-01-21 13:05:33

标签: r data-manipulation

我有一个矩阵,其中的colnames是样本名称,我创建了一个colnames的向量。

我还有一个样本名称的向量,我需要从矩阵中进行子集化,我发现它与矩阵的同名不同。

要对矩阵进行子集化,我需要找到矩阵中的哪些列对应于我需要的样本。

为了说明这一点:

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

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

我需要一种方法让R返回位置信息,以便为示例样本名称&#34; B&#34;,&#34; D&#34;,&#34; I&#34;, colnames的位置是:[1] 2 4 9

1 个答案:

答案 0 :(得分: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