找出 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-parts
(1:index
和 index: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
我有一个关于在列表中的索引之前和之后选择第一个非 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-parts
(1:index
和 index: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