2016-05-17 89 views
2

我有一個數據框,其中包含有關患者及其在醫院出診狀態的信息。我想創建從原來的一個新的數據幀,將列出他們約會的次數,數量錯過和數量出席如何創建按R中的變量進行分組的新數據表

例如,我的出發數據表如下所示:

Patient  Status 
A   Attended 
A   Attended 
A   Attended 
B   Did not attend 
C   Did not attend 
D   Attended 
D   Did not attend 

我想輸出表看起來像

Patient  Number of appointments Number attended  Number missed 
A   3        3     0 
B   1        0     1 
C   1        0     1 
D   2        1     1 

我試着看看以前的答案,但無法完全找到我的答案。我想我可能都與聚合函數的東西,但我不能弄明白

+0

理想情況下,你需要嘗試的東西你自己。如果您不知道如何,請先嚐試谷歌。然後嘗試解決問題。如果你的代碼仍然不起作用....那麼在這裏發佈一個問題。包括對問題的明確描述。包括無法工作的代碼 - 請參閱此處最小,完整和可驗證的示例 - 告訴我們您期望的行爲以及您實際獲得的內容 - 幷包括任何錯誤並告訴我們在哪裏他們是。乾杯:) –

+0

謝謝大衛,我會在下次做 – NorthwardNW

回答

3

我們可以做

library(data.table) 
setDT(df1)[,.(Number_of_appointments = .N, 
       Number_Attended = sum(Status== "Attended"), 
       Number_Missed = sum(Status == "Did not attend")) , Patient] 

或者使用dcast

dcast(setDT(df1)[, N:=.N, Patient], Patient+N~Status, value.var='Status', length) 
# Patient N Attended Did not attend 
#1:  A 3  3    0 
#2:  B 1  0    1 
#3:  C 1  0    1 
#4:  D 2  1    1 
+2

這很好,謝謝 – NorthwardNW

0
abc <- data.frame(Patient = c(rep("A",3),"B","C",rep("D",2)), 
Status = c(rep("Attended",3), 
    rep("Did not attend",2),"Attended","Did not attend")) 

abc[,c("Patient","Status")] <-apply(abc[,c("Patient","Status")] ,2, as.character) 

    Patient   Status 
     A  Attended 
     A  Attended 
     A  Attended 
     B Did not attend 
     C Did not attend 
     D  Attended 
     D Did not attend 


for(i in unique(abc$Patient)){ 
    abc$Number_of_appointments[abc$Patient==i] <-length(abc$Status[abc$Patient==i]) 
    abc$Number_attended[abc$Patient==i] <- sum(grepl("Attended",abc$Status[abc$Patient==i])%in%"TRUE") 
    abc$Number_missed[abc$Patient==i] <- sum(!grepl("Attended",abc$Status[abc$Patient==i])%in%"TRUE") 
} 

abc$Status <-NULL 
abc1<-abc[!duplicated(abc$Patient),] 

    Patient   Status Number_of_appointments Number_attended Number_missed 
     A  Attended      3    3    0 
     B Did not attend      1    0    1 
     C Did not attend      1    0    1 
     D  Attended      2    1    1 
相關問題