2016-11-30 12 views
0
list <- c(1,1,1,4,5,6,9,9,2) 

Хочу найти индекс 3 минимальных значений, но с условием, что индекс найденных минимумов составляет по меньшей мере 3 очка друга от друга. Чтобы найти 3 низкие показатели я используюг Индекс находки минимумов с зазором/расстоянием условием

which(list <= sort(list, decreasing=FALSE)[3], arr.ind=TRUE) 

, который не ищет каких-либо условий и результатов в

1,2,3

Мой желаемый результат

1,9,4

Я хочу знать, возможно ли это сделать без каких-либо циклов, так как мой список намного больше.

Большое вам спасибо.

Чтобы уточнить, что я имел в виду: показатели минимумов должны всегда находиться на определенном расстоянии. Например, для списка list<-c(1,3,9,5,9,9,2) результатом минимумов должен быть 1,7,4. Не 1,7,2, потому что индексы 1 и 2 слишком близки друг к другу. Еще раз спасибо за помощь.

+0

условия не очень ясны. Вы пытаетесь найти индекс с условием расстояния на «сортированном» векторе или исходном – akrun

+0

Я пытаюсь найти индекс с условием расстояния. – RHelpPlease

+0

Я имел в виду, находится ли расстояние в исходном векторе или отсортировано – akrun

ответ

1

Попробуйте это с помощью dplyr: создать dataframe с последовательностью во 2-м столбце, а затем отсортировать и найти первый

вхождение
library(dplyr) 

kk <- data.frame(cbind(list, seq=seq_along(list))) %>% 
    arrange(list) %>% # sort list 
    group_by(list) %>% # group 
    summarise(V3=min(seq)) %>% # find first occurance 
    .$V3 %>% # get sequence values 
    head(3) # get top 3 

[1] 1 9 4 
+0

Большое вам спасибо за усилия. Существует проблема, когда Минимы происходят в другом порядке. Например, для 'c (1,3,9,5,9,9,2)' я бы ожидал ** 1,7,4 **, но я получаю ** 1,7,2 ** – RHelpPlease

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

  • Нет связанных вопросов^_^