Выберите индекс первого не-NA значения, предшествующего и последующего индекса в R? - PullRequest
0 голосов
/ 10 мая 2018

У меня вопрос о том, чтобы выбрать индекс первым, а не NA значением, предшествующим и последующим за индексом в списке. Например, в приведенном ниже списке values[index] - это NA. Поэтому я хочу, чтобы функция возвращала индекс до (который в этом примере был бы равен 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) 

Ответы [ 3 ]

0 голосов
/ 10 мая 2018

Полагаю, вы также можете сделать это за один 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
0 голосов
/ 11 мая 2018

Можно отфильтровать 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
0 голосов
/ 10 мая 2018

Если

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...