在一个向量中找到满足特定条件的索引

38

我想找到一个条件,根据条件返回向量的索引。

例如- 我有一个向量 b = c(0.1, 0.2, 0.7, 0.9) 我想知道b中第一个大于0.65的元素的索引。在这种情况下,答案应该是3

我尝试过 which.min(subset(b, b > 0.65)), 但这会返回1而不是3。

请帮忙解决。

3个回答

43

使用 which 命令并取结果中的第一个元素:

which(b > 0.65)[1]
#[1] 3

2

注意,如果条件从未被满足,which.max 是错误的,它不会返回 NA

> a <- c(1, 2, 3, 2, 5)
> a >= 6
[1] FALSE FALSE FALSE FALSE FALSE
> which(a >= 6)[1]
[1] NA  # desirable
> which.max(a >= 6)
[1] 1   # not desirable

为什么?当所有元素相等时,which.max 返回 1:

> b <- c(2, 2, 2, 2, 2)
> which.max(b)
[1] 1

注意:FALSE < TRUE。

0

您可以使用which.max

which.max(b > 0.65)
# [1] 3

?which.max: "对于逻辑向量x,[...] which.max(x) 返回第一个[...] TRUE的索引"
b > 0.65
# [1] FALSE FALSE  TRUE  TRUE

你还应该查看代码的结果 subset(b, b > 0.65),以了解为什么它无法给出所需的结果。

2
我刚刚点了踩,因为我发现和Phuoc在下面发现的一样的错误。如果条件从未满足,它将返回1,而Roland的解决方案可能会返回NA。 - Yuan Tao

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接