मेरे पास 1s और 0s का एक लंबा वेक्टर है और मैं कुछ फ़ंक्शन ढूंढना चाहता हूं जो मुझे उस वेक्टर के भीतर 1s की प्रत्येक निरंतर सूची की लंबाई के साथ एक वेक्टर देगा। उदाहरण के लिए, मेरे पास जो वेक्टर है वह इस तरह दिखता है:

c(0,0,0,1,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,1,1,1,1,0,0)

और मैं ऐसा आउटपुट प्राप्त करना चाहता हूं जो इस तरह दिखता है (जहां आउटपुट में प्रत्येक मान इनपुट वेक्टर में अगली निरंतर लंबाई 1s की लंबाई है):

c(6,1,3,4)

तब मैं उस आउटपुट वेक्टर पर किसी भी आंकड़े को चला सकता हूं जो मुझे चाहिए। दोहराव/हस्तक्षेप करने वाले शून्य की लंबाई यादृच्छिक है और मेरे पास वास्तविक डेटा सेट लगभग 20000 तत्वों का एक वेक्टर है, इसलिए ऐसा कोई तरीका नहीं है जिससे मैं इसे हाथ से कर सकूं।

कोई विचार? मैं फंस गया हूँ।

शुक्रिया!

1
Robert 21 जुलाई 2020, 21:55

1 उत्तर

सबसे बढ़िया उत्तर

हम base R से rle का उपयोग कर सकते हैं और 'मानों' के तार्किक वेक्टर के आधार पर lengths को निकाल सकते हैं।

with(rle(as.logical(v1)), lengths[values])
#[1] 6 1 3 4

आंकड़े

v1 <- c(0,0,0,1,1,1,1,1,1,0,0,1,0,0,1,1,1,0,0,1,1,1,1,0,0)
1
akrun 21 जुलाई 2020, 21:56