2012-05-17 11 views
7

अगर मैं एक वेक्टरगणना लगातार संख्या

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

की तरह मुझे पता है कि कितने 1 इस मामले में a में एक साथ हैं, चाहते हैं जवाब 3 होगा और 2.

है क्या कोई स्क्रिप्ट ऐसा कर सकती है?

+6

उलटा समारोह मैं 'के लिए खोज रहे लोगों के 2 दिन में कम से कम 3 सवाल देखा है rle' यह एक अस्पष्ट समारोह लेकिन बहुत आसान है। –

उत्तर

17

?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

क्या यह 'मान' नहीं है और' मान' नहीं है? '$' के साथ आंशिक मिलान सही जानकारी पाता है, लेकिन इसलिए इसे चरम पर ले जाने के लिए 'ए ($) $ v' होगा। – thelatemail

7

इस बारे में कैसे?

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 

बड़े पैमाने पर डेटा के लिए, आप इसे एक सा कुछ जटिल चयन का उपयोग कर गति कर सकते हैं:

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

दूसरों सवाल का जवाब दे दिया है। मैं सिर्फ दो अवलोकन जोड़ना चाहूंगा:

डेटा एंट्री चाल: स्कैन का उपयोग करें (कक्षा "अंकीय", रेप या कॉमा की कोई ज़रूरत नहीं है) और यह व्हाट्स स्पेस द्वारा अलग वर्णों के लिए भी काम करता है यदि आप "चरित्र" जोड़ते हैं एक विवाद।

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

rle वास्तव में के लिए 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 inverse.rle के लिए व्यस्त कार्य था;) – Dason

+1

अच्छा, मुझे लगता है, लेकिन क्या आपने इसका कोड देखा है? –

संबंधित मुद्दे