2016-05-03 1 views
1

Как получить индекс последнего элемента каждого прогона?Получить индексы последнего элемента каждого прогона в векторе

Например: Давайте рассмотрим вектор

x=c(1,2,3,4,4,4,5,6,6,7,8,9,9,9,9) 

хотите получить выходной вектор

x1=1 2 3 6 7 9 10 11 15 

Пробовал с помощью:

rank(x) 

Это не дает желаемого результата.

+3

Вы можете использовать 'cumsum (rle (x) $ lengths)' –

+0

@docendodiscimus Post? –

+2

Другим вариантом является 'tapply (seq_along (x), x, FUN = tail, 1)' – akrun

ответ

5

(Вероятно, боян, но здесь вы идете ..)

Вы можете использовать магические силы ?rle в сочетании с cumsum:

cumsum(rle(x)$lengths) 
#[1] 1 2 3 6 7 9 10 11 15 

Выход rle является:

rle(x) 
#Run Length Encoding 
# lengths: int [1:9] 1 1 1 3 1 2 1 1 4 
# values : num [1:9] 1 2 3 4 5 6 7 8 9 
+0

Большое спасибо – Janak

1

Использование функции() в R

k<-as.vector(unique(x)) 
    x1<-vector() 
    for(i in 1:length(k)){ 
     x1[i]=tail(which(x==k[i]),1) 
    } 
+0

Спасибо за ваш ответ. – Janak

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