r - Mark start and end of groups -


एक data.table फ़ॉर्म की संरचना

  पर विचार करें विक्रेता खरीदार महीने 1: 50536344 61961225 1993-01-01 2: 50536344 61961225 1993-02-01 3: 50536344 61961225 1993-04-01 4: 50536344 61961225 1993-05-01 5: 50536344 61961225 1993-06-01   

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

  विक्रेता खरीदार का महीना शुरू होता है 1: 50536344 61961225 1993-01-01 सही गलत 2: 50536344 61961225 1993-02-01 झूठी सच्ची 3: 50536344 61961225 1993-04-01 सही गलत 4: 50536344 61961225 1993-05-01 झूठी झूठी 5: 50536344 61961225 1993-06-01 झूठी सच्ची    

यह मानते हुए कि माह में दिनांक वर्ग (या POSIXt , आईडीटेटीम या diff विधि वाला अन्य वर्ग), आप diff फ़ंक्शन का उपयोग कर सकते हैं ऐसा करें

  # सॉर्ट डेटाटबल सेटकीव (डीटी, सी ("विक्रेता", "खरीदार", "महीने")) # परिभाषित डीटी [प्रारंभ करें: प्रारंभ: = सी (सच, अंतर (महीने) ) (31)), द्वारा = सूची (विक्रेता, खरीदार)]    

संपादित करें: @ डेविड एरबेर्ग के प्रति सुझाव: आप निश्चित तौर पर एक बार में आरंभ और अंत को परिभाषित कर सकते हैं। यह थोड़ी तेजी से होनी चाहिए, हालांकि मुझे इसे पढ़ने में थोड़ा अधिक मुश्किल लगता है।

  dt [, ": =" (start = c (TRUE, diff (month)> 31), end = c (diff (month)> 31, TRUE)) द्वारा, = सूची (विक्रेता, खरीदार)]   

EDIT2: क्या हो रहा है की कुछ और विवरण: विक्रेता और खरीदार के प्रत्येक जोड़ी के लिए पहला अवलोकन हमेशा एक व्यावसायिक संबंध की शुरुआत होगी, इसलिए प्रारंभ = सी (सच, ...) । इसके बाद एक और अवलोकन एक व्यावसायिक संबंध की शुरुआत होगी, अगर केवल तभी एक महीने (31 दिन) से बड़ा हो, तो diff (month) & gt; 31 । दो चीजों को एक साथ लाना, आपको c (TRUE, diff (महीने)> 31) मिलता है। एक समान तर्क अंत के लिए लागू होता है, जहां आपको पिछले एक के बजाय अगले अवलोकन से तुलना करना पड़ता है।

Comments

Popular posts from this blog

ios - Adding an SKSpriteNode to SKScene from a child SKSpriteNode -

Matlab transpose a table vector -

c# - Textbox not clickable but editable -