2016-05-17 86 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 
相关问题