在 R 中挑选索引之前和之后的第一个非 NA 值的索引?

  • 本文关键字:索引 第一个 NA 之后 挑选 r na
  • 更新时间 :
  • 英文 :


我有一个关于在列表中索引之前和之后挑选索引的第一个非NA值的问题。例如,在下面的列表中,values[index]为 NA。所以我想要一个函数,它将返回一个 before index(在本例中为 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) 

if

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-parts(1: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

相关内容

最新更新