通过匹配向量获取矩阵列名称

时间:2014-07-18 15:29:16

标签: r

我开始使用矩阵

    Xray              Stay              Leave
[1,] "H"              "H"               "H"           
[2,] "A"              "L"               "O"          

我有以下矢量:

[1] "H" "L"

我想获得输出

"Stay". 

我试过了:

             which(vec %in% matrix )

但是这给了我以下输出:

[1] 1 2

似乎只是告诉我它找到H和L的行。我需要一个完全匹配的列名。

4 个答案:

答案 0 :(得分:2)

另一种方法:

vec <- c("H", "L")
colnames(mat)[colMeans(mat == vec) == 1]
# [1] "Stay"

其中mat是矩阵的名称。

答案 1 :(得分:1)

这应该返回一个逻辑向量:

 logv <-     apply(mat, 2, function(x) identical(vec,x))

然后这将选择正确的列名称:

 dimnames(mat)[[2]][logv]
 [1] "Stay"

测试用例:

mat <- matrix( c( "H","H", "H", "A","L","O") ,2, byrow=TRUE, 
               dimnames=list(NULL, c('Xray',    'Stay', 'Leave') ) )

答案 2 :(得分:1)

您可以尝试:     如果matvec是矩阵和向量

colnames(mat)[table(mat %in% vec, (seq_along(mat)-1)%/%nrow(mat) +1)[2,] >1]
#[1] "Stay"

答案 3 :(得分:1)

假设m是您的矩阵,您可以

> vec <- c("H", "A")
> colnames(m)[apply(m, 2, identical, vec)]

注意:此处使用的identical因为原始帖子显示&#34;我需要完全匹配的列名称&#34;