2017-08-04 76 views
0

這裏是R代碼。邏輯條件下的計數頻率

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) 

而且我想算適合的邏輯條件的案件數量:

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" 

請告訴我如何寫R.代碼非常感謝你。

+0

你嘗試過什麼方法到現在爲止?這個論壇不是通用代碼生成的地方。 – zwep

+2

只要執行'mydata%>%filter(之間(illdate,「2010-01-01」,「」2010-12-31「),處理==」T「,原因%在%c(」完成「,」 (Enddate,「2011-01-01」,「2012-12-31」))'更改爲'as.Date(「2010-01-01」)'如果需要 – akrun

+1

@akrun您應該添加作爲回答 – Sotos

回答

2

我們可以做

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

它的工作。你這麼多。:-) – Binnnnn

+0

@ WuBin謝謝你的評論,你也可以點擊[這裏](https://stackoverflow.com/help/someone-answers) – akrun

3

這裏是另一種方式,也許更少美麗:

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

它的工作,非常感謝。 - ) – Binnnnn