KİMLİĞİ ve Sonucuna göre grup ve (ben erken erken belli sonuçlar Tarih ve ata numaralarını almak.outcome1 e, outcome2)

0

Soru

Bunu açıklamıyorsam özür dilerim. Ancak aşağıdaki veri kümesine sahibim:

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"))

Aşağıda çıktılar. Gördüğünüz gibi, her hasta farklı zamanlarda belirli aşamalardadır ve her yeni aşamanın hasta başına ne zaman başlayacağının en erken tarihlerini yakalamak istiyorum. Daha sonra bu aşamaları CR1, Relapse1, CR2, Relapse2 vb.Olarak yeniden adlandırmak istiyorum.

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      
 

Bu elde etmeye çalıştığım çıktı:

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

Bu soruyla nereden başlayacağımdan tam olarak emin değilim ve herhangi bir yardım için minnettar olurum! Teşekkürler çocuklar!

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

En iyi cevabı

3

İle tidyverse aşağıdakileri deneyebilirsiniz.

(Gerekirse, önce arrange tarafından Date yani kronolojik sırada.)

Değişime bağlı olarak gruplama değeri oluşturma Outcome sütun(remisyondan nüksetmeye ve tersi). Kullandım rleid -den data.table kolaylık sağlamak ve geçici bir sütun oluşturmak için, Grp. Örneğin:

      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

Her birinin içinde görebilirsiniz. Id o zaman Outcome değişiklikleri Grp artışlar. Bu şekilde, aynı sonraki tarihler Outcome aynı dahil edilecektir Grp.

Bu .add argüman eklememize izin verir Grp sadece hangisi önce gruplandırma için Id. Yani, şimdi her ikisine de göre gruplama Grp ve Id olabilir o zaman slice ilk sıra. slice(1) veya slice(n = 1) grup içinde 1 satır tutacaktır. Bu durumda, her ikisine de göre gruplandırdık Id ve Grp bu nedenle, belirli bir süre için sadece 1 satır saklanacaktır Grp ve Id kombinasyon.

Son olarak, açıklanan geniş çıktıya izin verecek bir satır numarası ekleyebilirsiniz (CR ve Relaps için ardışık bir sayı dizisi: 1, 2, 3, 4...). Bu durumda, biz group_by her ikisi de Id ve Outcome ve bu kombinasyonun tarihlerini ardışık olarak numaralandırın. pivot_wider istenirse, verileri geniş bir biçime dönüştürür.

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)

Çıktı

     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

Teşekkürler! Bunu denedim ancak şu hatayı almaya devam ediyorum ` "' Hata: Hesaplanan sütunlar ekleme sorunu group_by(). x ile ilgili sorun mutate() giriş Grp. x "rleıd" işlevini bulamadı: Giriş Grp oluyor rleid(Outcome) ```
T K

@Ben, ahh benden 3 dakika daha hızlıydın: (Her neyse, sadece alt kümeleri ve shitf () işlevini kullanarak çözmeyi başarabilirdim. Bu çizgi nedir açıklar mısınız : group_by(Grp = rleid(Outcome), .add = T) %>% ne? Yanı sıra slice(1) .
RobertoT

@Ben Bu mükemmel çalıştı, çok teşekkür ederim!
T K

@Ben Tamamen yardımcı oldu!
RobertoT

Bu şekilde düzenlenmiştir rleid numaralandırma değişikliği ile yeniden başlatılır Id.
Ben

@ Ben Sakıncası yoksa bu soruyu takip edin. Sayımı ancak ilk CR görüldükten sonra başlatmak mümkün müdür? Öyleyse, bir kimliğin cr'den önce Nüksetmesi göz ardı edilirse ve ilk cr'den sonra ilk nüks Nüks 1 olarak kabul edilir mi? Teşekkürler!!
T K

@TK Diğer sorunuza cevap verdim-umarım bu yardımcı olur!
Ben

Diğer dillerde

Bu sayfa diğer dillerde

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................