R中逻辑向量的最近索引

问题描述 投票:0回答:1

我正在尝试根据另一列的条目从一列中获取最接近的TRUE值的索引。我的示例数据帧如下所示:

a <- c(FALSE,TRUE,FALSE,FALSE,FALSE,TRUE,FALSE,FALSE,TRUE,TRUE,FALSE,FALSE,FALSE,FALSE,FALSE)
b <- c(NA, NA, 3, NA, NA, NA, NA, 8, NA, NA, NA, 12, NA, NA, NA)
df <- data.frame(a, b)

我想创建一个新列,该列给出b中给定值之前最接近的TRUE值的索引。为了说明这一点,生成的df应该如下所示:

       a  b  c
1  FALSE NA NA
2   TRUE NA NA
3  FALSE  3  2
4  FALSE NA NA
5  FALSE NA NA
6   TRUE NA NA
7  FALSE NA NA
8  FALSE  8  6
9   TRUE NA NA
10  TRUE NA NA
11 FALSE NA NA
12 FALSE 12 10
13 FALSE NA NA
14 FALSE NA NA
15 FALSE NA NA

我知道我可以使用max(which(df$a == TRUE)),但我不知道如何使其仅考虑先前值的索引来使其工作。谢谢!

r indexing nearest-neighbor
1个回答
0
投票

我们可以使用findInterval / cut

inds <- which(df$a)
df$c <- inds[findInterval(df$b, inds)]

df
#       a  b  c
#1  FALSE NA NA
#2   TRUE NA NA
#3  FALSE  3  2
#4  FALSE NA NA
#5  FALSE NA NA
#6   TRUE NA NA
#7  FALSE NA NA
#8  FALSE  8  6
#9   TRUE NA NA
#10  TRUE NA NA
#11 FALSE NA NA
#12 FALSE 12 10
#13 FALSE NA NA
#14 FALSE NA NA
#15 FALSE NA NA
© www.soinside.com 2019 - 2024. All rights reserved.