2015-10-09 2 views
0

У меня есть большой вектор, где у меня разные значения. Я хотел бы найти первые N значений, которые меньше определенного значения.Получить первые n индексов, выполняющих условие в r

Например, в следующем векторе я хочу только три индекса, которые меньше, чем 3

x2 <- c(1.6,0.35,1,3,6,8,1.5,2) 
x3 <- which(x2 < 3) 
x3 
[1] 1 2 3 7 8 

От X3 можно извлечь первые три значения, но они не являются наименьшие значения в векторе. Если я закажу вектор X2 перед применением условия, я теряю индексы значений. То, что я хочу в конце следующим

[1] 2 3 7 
+0

Вы ищете индексы из наименьших трех значений в векторе? –

+0

@CactusWoman: Да, это правильно. – Vamsi

+0

Это, вероятно, ответит на ваш вопрос: http://stackoverflow.com/questions/13458702/determining-minimum-values-in-a-vector-in-r –

ответ

4

rank функции то, что вы ищете:

which(rank(x2)<=3 & x2<3) 
#[1] 2 3 7 
+0

Спасибо за ответ. Это то, что я искал. – Vamsi

1

Try:

match(sort(x2[x2 < 3])[1:3], x2) 
#[1] 2 3 7 

Мы можем соответствовать наименьшие 3 значения меньше порога к исходному вектору.

редактировать

Это будет работать с уникальными и неоднородными векторами

which(!is.na(match(x2, sort(x2[x2 < 3])[1:3]))) 
[1] 2 3 7 
+0

Спасибо за ответ. Но это не работает, если вектор не уникален. – Vamsi

+0

Я обновил. Но я думаю, что @ nicola больше подходит к делу. Выберите тот. –

+0

Спасибо за обновление. – Vamsi

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