0

我有一个矩阵,我想从中选择一个观察值及其列名。

如果我使用subset()ormatrix[]%in%然后我得到整行。

我只想得到那个单一的观察和它的列名。有没有办法做到这一点?

这是一个例子:

矩阵:

        col1 col2 col3
row 1    10   20    30 
row 2    30   30    40

现在我想选择具有最高值的值和列名:

max <- max(matrix)
subset(matrix, matrix==max)

这给出了输出:

        col1 col2 col3
row 2    30   30    40

但是我想得到的是:

       col3
        40
4

2 回答 2

1

由于您已经知道该值,您只需要获取列名。

m出于明显的原因调用您的矩阵:

m <- matrix(c(10,30,20,30,30,40), ncol=3)
colnames(m) <- c('col1','col2','col3')

要查看哪些列包含最大值(或任何特定值)及其名称,apply可用于返回具有名称的逻辑向量:

apply(m==10, 2, any)
col1  col2  col3 
TRUE FALSE FALSE 

apply(m==30, 2, any)
col1 col2 col3 
TRUE TRUE TRUE 

which告诉您哪些值是正确的:

which(apply(m==40, 2, any))
col3 
   3 

只是名称,如果这是您需要的:

names(which(apply(m==40, 2, any)))
[1] "col3"
于 2012-12-22T14:41:48.837 回答
0

试试这个:

setNames(c(m), colnames(m)[col(m)])[m == max(m)]
于 2012-12-22T14:51:01.610 回答