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 靠得太近了。再次感谢你帮助我。

4

1 回答 1

1

使用 dplyr 试试这个:在第二列中创建一个带有序列的数据框,然后排序并找到第一次出现

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
于 2016-11-30T13:22:10.887 回答