2012-05-17 13 views
7

Ben 1 bu durumda, a birlikte kaç bilmek istiyorumKont ardışık sayılar

"a": 0 0 0 1 1 1 0 0 0 0 1 1 0 0 0 

gibi bir vektör cevap 3 olacak ve 2.

mi Bunu yapabilecek herhangi bir betik var mı?

+6

için ters fonksiyonudur. –

cevap

17

Bkz. ?rle.

## create example vector 
a <- c(rep(0, 3), rep(1, 3), rep(0, 4), rep(1, 2), rep(0, 3)) 

## count continuous values 
r <- rle(a) 

## fetch continuous length for value 1 
r$lengths[r$values == 1] 
# [1] 3 2 
+0

"Değer" değil "değer" değil mi? '$' Ile kısmi eşleştirme, doğru bilgiyi bulur, ancak (a) $ v’nın onu aşırıya çekmesini sağlar. – thelatemail

7

Bu nasıl?

test <- c(0,0,0,1,1,1,0,0,0,0,1,1,0,0,0) 
rle(test)$lengths[rle(test)$values==1] 
#[1] 3 2 

masif veriler için, bazı dolambaçlı seçerek kullanarak onu biraz hızlandırabilir:

diff(unique(cumsum(test == 1)[test != 1])) 
#[1] 3 2 
5

Diğerleri soru cevap var. İki gözlemi eklemek isterim:

Veri girişi numarası: taramayı kullanın (varsayılan olarak "numeric" olarak sınıflandırılır, rep veya virgüllere gerek yoktur) ve "karakter" i eklediğinizde boşluk ile ayrılmış karakterler için de çalışır. tartışma.

a <- scan() 
1: 0 0 0 1 1 1 0 0 0 0 1 1 0 0 0 
16: 
Read 15 items 

rle Ben bilinmeyen bir fonksiyon ama çok kullanışlı rle` `arayan kullanıcıların 2 gün içinde en az 3 soru gördüm gerçekten rep

arle <- rle(a) 
rep(arle$values, arle$lengths) 
[1] 0 0 0 1 1 1 0 0 0 0 1 1 0 0 0 
+1

Rle'nin inverse.rle için tersi bir işlevi olduğunu düşünmüştüm;) – Dason

+1

Sanırım, ama onun kodunu incelediniz mi? –