如何在which()函数中仅返回所需的向量

时间:2018-11-08 15:15:04

标签: r indexing which

我有这个初始矩阵:

> fil
2 3 6 
1 1 1

> str(fil)
 Named num [1:3] 1 1 1
 - attr(*, "names")= chr [1:3] "2" "3" "6"

当我这样做时:

which(fil==min(fil,na.rm = TRUE))

我已经退回了

> which(fil==min(fil,na.rm = TRUE))
2 3 6 
1 2 3 

我想返回向量的名称:

2 3 6

帮助:)

1 个答案:

答案 0 :(得分:1)

当您看到类似问题的输出时,您必须怀疑上面的向量是在其下面打印的向量的名称。下面是实际矢量,其值,而不是输出的第一行。
已通过str

确认
str(fil)
# Named num [1:3] 1 1 1
# - attr(*, "names")= chr [1:3] "2" "3" "6"

它首先说Named num,所以它是一个命名为数字的向量。
然后是attributes行。有问题的属性是"names"。并且有一些函数可以获取一些常见的属性,例如"names"属性。

fil <- c('2' = 1, '3' = 1, '6' = 1)

fil
#2 3 6 
#1 1 1

attributes(fil)
#$names
#[1] "2" "3" "6"

有两种获取属性"names"的方法。第二个是我将使用的快捷方式:

attr(fil, "names")
#[1] "2" "3" "6"

names(fil)
#[1] "2" "3" "6"

现在,要回答这个问题,只需对与向量fil的最小值相对应的名称进行子集化。

names(fil)[which(fil==min(fil,na.rm = TRUE))]
#[1] "2" "3" "6"