समूह आईडी और परिणाम और जल्द से जल्द जल्द से जल्द तिथियाँ के विशिष्ट परिणामों और एक निर्दिष्ट संख्या (मैं.ई outcome1, outcome2)

0

सवाल

क्षमा याचना नहीं हूँ तो मैं समझा, यह स्पष्ट रूप से. लेकिन मैं निम्नलिखित डेटासेट:

mydata = data.frame (Id =c (1,1,1,1,1,1,1,1,2,2,2,2),
Date = c("2001-01-31", "2001-02-13","2001-05-31",
"2001-06-02","2018-01-31","2018-03-31","2018-07-31",
"2019-04-04","2014-01-31","2014-02-02","2014-04-31",
"2014-05-18"),Outcome = c("CR","CR","Relapse","Relapse",
"CR","CR","CR","Relapse","CR", "CR","Relapse","CR"))

जो outputs के नीचे. के रूप में आप देख सकते हैं, प्रत्येक रोगी है कुछ चरणों में अलग अलग समय पर और मैं की तरह होता है पर कब्जा करने के लिए जल्द से जल्द तारीख की जब हर नया चरण शुरू होता है, रोगी के प्रति. मैं तो करने के लिए का नाम बदलें, इन चरणों करने के लिए CR1, Relapse1, CR2, Relapse2 और बहुत आगे है ।

Id     Date        Outcome
1   2001-01-31  CR      
1   2001-02-13  CR      
1   2001-05-31  Relapse     
1   2001-06-02  Relapse     
1   2018-01-31  CR      
1   2018-03-31  CR      
1   2018-07-31  CR      
1   2019-04-04  Relapse     
2   2014-01-31  CR      
2   2014-02-02  CR
2   2014-04-31  Relapse     
2   2014-05-18  CR      
 

इस उत्पादन की कोशिश कर रहा हूँ प्राप्त करने के लिए:

Id     CR1       Relapse1      CR2       Relapse2
1   2001-01-31  2001-05-31  2018-01-31  2019-04-04
2   2014-01-31  2014-04-31  2014-05-18  NA

मैं नहीं काफी यकीन है कि जहां शुरू करने के लिए इस सवाल के साथ और किसी भी मदद की सराहना करेंगे! आप लोगों को धन्यवाद!

data-manipulation group-by r
2021-11-23 19:44:31
1

सबसे अच्छा जवाब

3

के साथ tidyverse आप निम्नलिखित की कोशिश कर सकते.

(यदि आवश्यक हो तो, पहली arrange द्वारा Date तो, यह है कालानुक्रमिक क्रम में.)

बनाएँ एक समूह के आधार पर मूल्य में परिवर्तन Outcome स्तंभ से (छूट डूबने के लिए और इसके विपरीत). मैं प्रयोग किया जाता rleid से data.table सुविधा के लिए बनाया गया है और एक अस्थायी स्तंभ, Grp. उदाहरण के लिए:

      Id Date       Outcome   Grp
   <dbl> <chr>      <chr>   <int>
 1     1 2001-01-31 CR          1
 2     1 2001-02-13 CR          1
 3     1 2001-05-31 Relapse     2
 4     1 2001-06-02 Relapse     2
 5     1 2018-01-31 CR          3
 6     1 2018-03-31 CR          3
 7     1 2018-07-31 CR          3
 8     1 2019-04-04 Relapse     4
 9     2 2014-01-31 CR          1
10     2 2014-02-02 CR          1
11     2 2014-04-31 Relapse     2
12     2 2014-05-18 CR          3

आप देख सकते हैं, प्रत्येक के भीतर Id, कि जब Outcome परिवर्तन, Grp बढ़ जाती है । कि जिस तरह से, बाद में तारीख के साथ एक ही Outcome में शामिल किया जाएगा एक ही Grp.

के .add तर्क हमें की अनुमति देता है जोड़ने के लिए Grp के लिए पहले समूह है, जो सिर्फ था Id. तो, समूहीकरण अब दोनों के द्वारा Grp और Id, आप कर सकते हैं तो slice पहली पंक्ति. slice(1) या slice(n = 1) रखना होगा 1 पंक्ति समूह के भीतर. इस मामले में, हम दोनों के द्वारा वर्गीकृत किया है Id और Grp, तो केवल 1 पंक्ति में रखा जा सकता है के लिए एक दिए गए Grp और Id संयोजन ।

अंत में, आप जोड़ सकते हैं एक पंक्ति संख्या के लिए अनुमति देगा कि व्यापक उत्पादन वर्णित (एक लगातार संख्या के अनुक्रम के लिए सीआर और पतन: 1, 2, 3, 4...). इस मामले में, हम group_by दोनों Id और Outcomeहै , और लगातार संख्या के लिए दिनांक इस संयोजन. pivot_wider डाल दिया जाएगा में डेटा विस्तृत स्वरूप अगर वांछित.

library(data.table)
library(tidyverse)

mydata %>%
  group_by(Id) %>%
  mutate(Grp = rleid(Outcome)) %>%
  group_by(Grp, .add = T) %>%
  slice(1) %>%
  group_by(Id, Outcome) %>%
  mutate(n = row_number()) %>%
  pivot_wider(id_cols = Id, names_from = c(Outcome, n), values_from = Date)

आउटपुट

     Id CR_1       Relapse_1  CR_2       Relapse_2 
  <dbl> <chr>      <chr>      <chr>      <chr>     
1     1 2001-01-31 2001-05-31 2018-01-31 2019-04-04
2     2 2014-01-31 2014-04-31 2014-05-18 NA  
2021-11-23 21:26:09

धन्यवाद! मैं करने की कोशिश की है, लेकिन हो रही रखने निम्न त्रुटि: `` त्रुटि: समस्या को जोड़कर परिकलित स्तंभों में group_by(). x के साथ समस्या mutate() इनपुट Grp. एक्स नहीं मिल सकता है, समारोह "rleid" ℹ इनपुट Grp है rleid(Outcome) ``
T K

@बेन, आह थे तुम मुझे तुलना में तेजी से 3 मिनट के लिए :( वैसे भी मैं केवल सकता है हल करने के लिए प्रबंधन का उपयोग कर इसे कैंपेन्स और shitf() समारोह. आप व्याख्या कर सकते हैं क्या इस लाइन: group_by(Grp = rleid(Outcome), .add = T) %>% क्या करना है? के रूप में अच्छी तरह के रूप में slice(1) .
RobertoT

@बेन है कि पूरी तरह से काम किया, बहुत बहुत धन्यवाद!
T K

@बेन पूरी तरह से मददगार!
RobertoT

संपादित के साथ इतना है कि rleid नंबरिंग पुनरारंभ हो जाता है में परिवर्तन के साथ Id.
Ben

@बेन ऊपर का पालन सवाल पर यह अगर तुम न मन से. यह सब संभव करने के लिए ही शुरू की गिनती के बाद पहली सीआर देखा गया है? तो अगर एक आईडी है, डूबने से पहले सीआर होगा कि नजरअंदाज कर दिया और फिर पहला पतन के बाद पहली सीआर के लिए किया जाएगा के रूप में माना जाता डूबने 1? धन्यवाद!!
T K

@TK मैंने जवाब दिया अपने दूसरे सवाल - आशा है कि इस मदद करता है!
Ben

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में