找出 R 中索引前后的第一个非 NA 值的索引?

Pick out the index of the first non-NA value preceding and succeeding an index in R?

我有一个关于在列表中的索引之前和之后选择第一个非 NA 值的问题。例如,在下面的列表中,values[index] 是 NA。所以我想要一个 return 前索引的函数(在这个例子中是 3,因为 0.5 是第一个非 NA 值)和一个后索引(在这个例子中是 7,因为 0.3 是索引后的第一个值不是 NA)。

感谢您的帮助!我想我可以用 for 循环来完成,但我正在努力避免这种情况。

 index = 5
 values=c(0.4, NA, 0.5, NA, NA, NA, 0.3 ,NA, NA, NA, 0.5, 0.3,0.5) 

如果

index = 5
values=c(0.4, NA, 0.5, NA, NA, NA, 0.3 ,NA, NA, NA, 0.5, 0.3,0.5)

那么您要查找的两个值是

max(which(!is.na(values))[which(!is.na(values))<index])
[1] 3

min(which(!is.na(values))[which(!is.na(values))>index])
[1] 7

我想你也可以在一个 which 中做到这一点,比如:

#Max
which(!is.na(values) & seq_along(values) > index)[1]
#[1] 7

#Min
tail(which(!is.na(values) & seq_along(values) < index), 1)
#[1] 3

一个选项是过滤 vector 以拆分为 2-parts1:indexindex:length)。然后从两部分中找到第一个 non-NA 为:

#Data
index = 5
values=c(0.4, NA, 0.5, NA, NA, NA, 0.3 ,NA, NA, NA, 0.5, 0.3,0.5) 

#Min
max(which(!is.na(values[1:index])))
#[1] 3

#Max  - which will return offset form `index`. Hence, we need to adjust it
min(which(!is.na(values[index:length(values)])))+(index-1)
#[1] 7