2016-09-30 13 views
-2

ich wirklich auf einem Problem etwas Hilfe schätzen würde ich in R.mit Zeiten in R Arbeiten - Kategorisieren Zeitintervalle durch eine ID

Ich habe einen Datenrahmen mit einer Reihe von IDs, Daten zu lösen bin zu kämpfen und Behandlungen. Mein Endziel ist es, die Anzahl der Ereignisse, die einer ID passieren, durch Behandlung innerhalb eines bestimmten Zeitrahmens zu zählen.

Zum Beispiel hat

ID Eine Behandlung innerhalb zweimal innerhalb von drei Monaten und vier Mal innerhalb von sechs Monaten. Ich erwarte eine Reihe von bedingten Spalten, die die Anzahl der Vorkommen zählen.

Der Datenrahmen folgt eine ähnliche Struktur:

ID date  treatment 
1A 20/09/2015 A 
1A 21/09/2015 B 
1A 22/10/2015 A 
2A 22/09/2015 C 
2A 20/10/2015 C 

Mein Endziel wäre so etwas wie zu haben ...

ID date  treatment  
1A 01/01/2016 A  
1A 01/03/2016 A   
1A 01/04/2016 A 
1A 01/05/2016 A 
1A 01/11/2016 A 
2A 01/01/2016 A 
2A 01/09/2016 A 

Gruppierung zu ...

ID  a_within_3_months a_within_6_months... 
1A  3     1 
2A  0     0 

Ich bin mir sicher, dass dies in data.table möglich sein muss, aber ich habe Mühe herauszufinden, wie ich das über Zeilen berechnen soll die Bedingungen, die ich will.

Ich hoffe, das ist klar - gerne mehr Details zur Verfügung stellen ist hilfreich.

Vielen Dank für jede Hilfe mit diesem Problem! Vielen Dank für Ihre Zeit.

+0

mir nicht klar, was „innerhalb von 3 Monaten“ bedeutet - ist es max innerhalb irgendwelcher drei aufeinander folgenden Monaten, oder ist es von der ersten Datum oder ... ? – eddi

+1

Ich denke, Sie müssen ein reproduzierbares Beispiel erstellen. Einige Anleitung: http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example/28481250#28481250 – Frank

+0

Danke für Ihre Antwort Eddi. In diesem Fall würde ich gerne zählen, wie oft die ID innerhalb von drei Monaten nach dem ersten Datum eine andere Behandlung hat. –

Antwort

0

Dies könnte das sein, was Sie suchen:

> first_date <- as.Date(
     as.character(20140612), 
      "%Y%m%d") 
> data<- data.frame(
     ID=c(rep(1,5), rep(2,5)), 
     date=seq(first_date, by="1 day", length.out=10), 
     trtm=c(rep("a",3), rep("b",2), rep("c",3), rep("d",2))) 

data 
ID  date trtm 
1 2014-06-12 a 
1 2014-06-13 a 
1 2014-06-14 a 
1 2014-06-15 b 
1 2014-06-16 b 
2 2014-06-17 c 
2 2014-06-18 c 
2 2014-06-19 c 
2 2014-06-20 d 
2 2014-06-21 d 

> data <- data.table(data) 

> data[,.(within=max(date)-min(date),  
      n_of_trtm=length(date)), 
     by=.(ID,trtm)] 

    ID trtm within n_of_trtm 
1: 1 a 2 days   3 
2: 1 b 1 days   2 
3: 2 c 2 days   3 
4: 2 d 1 days   2 
+0

Perfekt! Das ist sehr hilfreich und beantwortet meine Frage. Vielen Dank! –

Verwandte Themen