2017-08-04 3 views
0

Hier ist der R-Code.Frequenzen mit logischer Bedingung zählen

illdate<-c("2009-05-26","2010-12-03","2011-06-05","2010-08-10","2009-05-14","2010-01-08","2012-08-07","2010-11-13","2013-06-06","2010-08-26") 

Treated<-c("T","T","N","T","N","N","T","T","T","N") 

Reason<-c("Finish","Finish","Dead","Dead","Cured","Cured","Finish","Finish","Dead","Cured") 

Enddate<-c("2009-12-12","2011-05-08","2011-02-28","2010-10-30","2011-10-08","2011-03-03","2013-05-05","2011-05-06","2014-08-08","2012-07-07") 

number<-c(1:10) 

mydata<-data.frame(number,illdate,Treated,Reason,Enddate) 

Und ich will die Zahl der Fälle zählen, die die logischen Bedingungen passen:

1:illdate between "2010-01-01" and "2010-12-31" 

2:Treated= "T" 

3:Reason= "Finish" & "Cured" 

4:Enddate between "2011-01-01" and "2012-12-31" 

Bitte sagen Sie mir, wie der Code in R. Vielen Dank zu schreiben.

+0

Was Ansatz, den Sie bisher versucht haben, nach oben? Dieses Forum ist kein Ort für generische Code-Generierung. – zwep

+2

Nur 'mydata%>% filter (zwischen (illdate," 2010-01-01 "," "2010-12-31"), behandelt == "T", Grund% in% c ("Fertig stellen", " Cured "), zwischen (Enddatum," 2011-01-01 "," 2012-12-31 ")' zu 'as.Date (" 2010-01-01 ") wechseln' falls nötig – akrun

+1

@akrun sollte hinzugefügt werden als Antwort – Sotos

Antwort

2

Wir

tun
res <- mydata %>% 
     mutate_at(vars(matches("date")), as.Date) %>% 
     filter(between(illdate, as.Date("2010-01-01"), as.Date("2010-12-31")), 
      Treated == "T", 
      Reason %in% c("Finish", "Cured"), 
      between(Enddate, as.Date("2011-01-01"), as.Date("2012-12-31"))) 

dim(res) 
#[1] 2 5 
+0

Es hat funktioniert Du hast so viel. :-) – Binnnnn

+0

@WuBin Danke für die Kommentare. Du kannst auch [hier] (https://stackoverflow.com/help/someone-answers) nachsehen. – akrun

3

Hier ist eine andere Art und Weise, vielleicht weniger schön:

nrow(subset(mydata,"2010-01-01" < as.Date(illdate) & as.Date(illdate) < "2010-12-31" & 
    Treated == "T" & Reason %in% c("Finish", "Cured") & 
    "2011-01-01" < as.Date(Enddate) & as.Date(Enddate) < "2012-12-31")) 
+1

Es hat geklappt. Vielen, vielen Dank.: -) – Binnnnn