2010-06-09 2 views
3

Предположим, у вас есть вектор, как так:сокращение последовательности в R

v <- c(1,1,1,2,2,2,2,1,1,3,3,3,3) 

Как можно лучше свести к data.frame, как это?

v.df <- data.frame(value=c(1,2,1,3),repetitions=c(3,4,2,4)) 

В процедурном языке, который я мог бы просто итерацию через петлю и построить data.frame как я иду, но с большим набором данных в R такой подход неэффективен. Любой совет?

ответ

11

или более просто

data.frame(rle(v)[]) 
+0

Это приятно, еще более лаконично. – Greg

+0

Другие способы 'data.frame (unclass (rle (v)))' или 'as.data.frame.list (rle (v))' – Marek

8
with(rle(v), data.frame(values, lengths)) 

должно предоставить вам то, что вам нужно.

values lengths 
    1  3 
    2  4 
    1  2 
    3  4 
+0

Именно функция я имел в виду; Я просто не мог вспомнить имя моей жизни! Огромное спасибо. – russellpierce

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

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