list <- c(1,1,1,4,5,6,9,9,2)
Chcę znaleźć indeks 3 najniższych wartości, ale pod warunkiem, że indeks znalezionych minimów będzie co najmniej 3 punkty od siebie. Aby znaleźć 3 najniższe wskaźniki, których używam
which(list <= sort(list, decreasing=FALSE)[3], arr.ind=TRUE)
który nie szuka żadnych warunków i skutkuje
1,2,3
Mój pożądany wynik to
1,9,4
Chcę wiedzieć, czy można to zrobić bez żadnych pętli, ponieważ moja lista jest znacznie większa.
Z góry bardzo dziękuję.
Aby wyjaśnić, co miałem na myśli: wskaźniki minimów muszą zawsze znajdować się w pewnej odległości. Na przykład dla listy
list<-c(1,3,9,5,9,9,2)
wynik minimów powinien być1,7,4
. Nie1,7,2
, ponieważ wskaźniki 1 i 2 są zbyt blisko siebie. Jeszcze raz dziękuję za pomoc.
Odpowiedzi:
1 dla odpowiedzi № 1Wypróbuj to za pomocą dplyr: utwórz ramkę danych z sekwencją w drugiej kolumnie, a następnie posortuj i znajdź pierwsze wystąpienie
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