R create ID within a group -


मेरे पास निम्न डेटासेट है:

  df & lt; -structure (list (idfam = c ("2010 7599 2996 1", "2010 7599 3071 1", "2010 7599 3071 1", "2010 7599 3660 1", "2010 7599 4736 1", "2010 7599 6235 1", "2010 7599 629 9 1", "2010 7599 9 903 1", "2010 75 99 11013 1", "2010 7599 11778 1", "2010 7599 11778 1", "2010 7599 12248 1", "2010 7599 13127 1", "2010 7599 14261 1", " 2010 7599 16280 1 "," 2010 7599 16280 1 "," 2010 7599 16280 1 "," 2010 7599 16280 1 "," 2010 7599 16280 1 "," 2010 7599 17382 1 "), AGED = c (45L, 47L, 24L, 46L, 46L, 44L, 43L, 43L, 43L, 16L, 43L, 46L, 44L, 47L, 43L, 16L, 20L, 18L, 18L, 43L))। नाम = c ("IDFAM", "AGED" ), पंक्ति.नाम = सी ("5614", "5748", "5753", "6864", "8894", "11761", "11884", "18738", "20896", "22351", "22353 "," 23 9 7 "," 24 9 3 "," 27072 "," 30 946 "," 30 9 47 "," 30 9 4 4 "," 30 950 "," 30 9 52 "," 33034 ", वर्ग =" डेटा.फ्रेम ")   

मैं एक ही IDFAM मान वाले प्रत्येक अवलोकन के लिए एक आईडी निर्दिष्ट करना चाहूंगा 1 से लेकर एन तक, जहां एन को आईडीएफएएम के समान मूल्य के साथ अवलोकन की संख्या है। इसका परिणाम निम्न तालिका में होगा:

  IDFAM AGED ID 2010 7599 2996 1 45 1 2010 7599 3071 1 47 1 2010 7599 3071 1 24 2 2010 7599 3660 1 46 1 2010 7599 4736 1 46 1 2010 75 99 6235 1 44 1 2010 75 99 629 9 1 43 1 2010 75 99 9 903 1 43 1 2010 75 99 11013 1 43 1 2010 7599 11778 1 16 1 2010 75 99 11778 1 43 2 2010 75 99 12248 1 46 1 2010 75 99 13127 1 44 1 2010 7599 14261 1 47 1 2010 7599 16280 1 43 1 2010 7599 16280 1 16 2 2010 7599 16280 1 20 3 2010 75 99 16280 1 18 4 2010 75 99 16280 1 18 5 2010 7599 17382 1 43 1   < p> मैं यह कैसे कर सकता हूँ? धन्यवाद।   

कई तरीके हैं

बेस आर में, एवे :

  के साथ (डीएफ, एवे (प्रतिनिधि (1, नेरो (डीएफ)), आईडीएफएएम, म्यूज़ = seq_along)) # [1] 1 1 2 1 1 1 1 1 1 1 2 1 1 1 1 2 3 4 5 1   

"डेटा योग्य" पैकेज के साथ , अनुक्रम (।) का उपयोग करें :

  लाइब्रेरी (डेटा योग्य) डीटी & lt; - as.data.table (df) डीटी [, आईडी: = अनुक्रम (D) "dplyr" पैकेज के साथ, कोशिश करें:  
  df% & gt;% group_by (आईडीएफएएम) (आईडीएफएएम) द्वारा   

) (या टिप्पणी में हैडली द्वारा सुझाए गए अनुसार):

  df% & gt;% group_by (आईडीएफएएम)% & gt;% mutate (count = row_number (IDFAM))   

अपडेट

चूंकि यह ऐसा कुछ प्रतीत होता है अपेक्षाकृत अक्सर पूछे जाने पर, यह सुविधा मेरे "splitstackshape" पैकेज में फ़ंक्शन ( getanID ) के रूप में जोड़ दी गई है। यह ऊपर "डेटा योग्य" दृष्टिकोण पर आधारित है।

  लाइब्रेरी (स्प्लिट स्टाक्सशैप) getanID (df, id.vars = "IDFAM") # आईडीएफएएम AGED। # 1: 2010 7599 2996 1 45 1 # 2: 2010 7599 3071 1 47 1 # 3: 2010 7599 3071 1 24 2 # 4: 2010 7599 3660 1 46 1 # 5: 2010 7599 4736 1 46 1 # 6: 2010 7599 6235 1 44 1 # 7 : 2010 7599 629 9 1 43 1 # 8: 2010 75 9 9 9 1 1 43 1 # 9: 2010 75 99 11013 1 43 1 # 10: 2010 7599 11778 1 16 1 # 11: 2010 75 99 11778 1 43 2 # 12: 2010 75 99 12248 1 46 1 # 13: 2010 7599 13127 1 44 1 # 14: 2010 7599 14261 1 47 1 # 15: 2010 7599 16280 1 43 1 # 16: 2010 7599 16280 1 16 2 # 17: 2010 7599 16280 1 20 3 # 18: 2010 75 99 16280 1 18 4 # 1 9: 2010 7599 16280 1 18 5 # 20: 2010 7599 17382 1 43 1    

Comments

Popular posts from this blog

Verilog Error: output or inout port "Q" must be connected to a structural net expression -

jasper reports - How to center align barcode using jasperreports and barcode4j -

c# - ASP.NET MVC - Attaching an entity of type 'MODELNAME' failed because another entity of the same type already has the same primary key value -