2015-06-26 2 views
0

У меня есть вектор, как следующее:R, чтобы найти элементы в векторе, что их показатели дозы не существуют в другом векторе

VEC = c(4,8,8,8) 

У меня также есть индексы вектор, который говорит мне, какие элементы в VEC я должен игнорировать :

indx = c(2,4) 

Я хочу, чтобы получить индекс первого элемента чьего значения 8 но индекс не существует в INDX массива. Как мне это сделать?

Так что в принципе я должен получить 3 в качестве ответа. VEC[3] = 8 (но второй 8 не первый).


Вот еще один VEC = c(1,3,5,3,3,3,3) и вот список игнорируемых: indx=c(1,2,4,6) Допустим, я ищу значения, которые соответствуют 3. Индекс, который должен быть возвращение 5, потому что VEC[1], VEC[2], VEC[4], VEC[6] находятся в списке игнорируемых и первое появление имеет значение индекса 5.

ответ

3

Если вы хотите оригинальный индекс, то вы можете сделать что-то вроде

VEC <- c(4,8,8,8) 
indx <- c(2,4) 

which(VEC==8 & !(seq_along(VEC) %in% indx)) 
which(VEC==8 & !(seq_along(VEC) %in% indx))[1] #to get just the first 

Это немного некрасиво, но может быть более эффективный

ok<-`[<-`(!logical(length(VEC)), indx, FALSE) 
which(VEC==8 & ok) 
which(VEC==8 & ok)[1] #to get just the first 
+0

Я принял это как решение, хотя @teucer ответа приемлемо тоже, но этот ответ является правильным, без каких-либо изменений. Массивы, которые я использую, короткие, поэтому скорость не такая уж большая проблема. – Ash

3

Это могло бы быть более эффективным

VEC <- c(4,8,8,8) 
indx <- c(2,4) 

VEC[indx] <- NA 
which(VEC==8)[1] 
+0

Аккуратное решение, хотя я не могу изменить VEC, поскольку я использую его в другом месте в своем коде. Поэтому в основном я должен хранить/восстанавливать их – Ash

Смежные вопросы