2010-06-09 32 views
3

Supposons que vous avez un vecteur comme ceci:réduction de la séquence en R

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

Comment peut-il être réduit à un meilleur data.frame comme celui-ci?

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

Dans un langage procédural je pourrais juste itérer une boucle et construire le data.frame que je vais, mais avec un grand ensemble de données en R une telle approche est inefficace. Aucun conseil?

Répondre

11

ou plus simplement

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

C'est bien, encore plus succinct. – Greg

+0

Autre façon 'data.frame (unclass (rle (v)))' ou 'as.data.frame.list (rle (v))' – Marek

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

devrait vous apporter ce dont vous avez besoin.

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

C'est exactement la fonction que je pensais; Je ne pouvais pas me souvenir du nom de la vie de moi! Merci beaucoup. – russellpierce