首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在R中执行countif并导出数据?

如何在R中执行countif并导出数据?
EN

Stack Overflow用户
提问于 2015-05-22 14:23:35
回答 1查看 67关注 0票数 1

我有一套数据:

代码语言:javascript
复制
ID<-c(111,111,222,222,222,222,222,222)
TreatmentDate<-as.Date(c("2010-12-12","2011-12-01","2009-8-7","2010-5-7","2011-3-7","2011-8-5","2013-8-27","2016-9-3"))
Treatment<-c("AA","BB","CC","DD","AA","BB","BB","CC")
df<-data.frame(ID,TreatmentDate,Treatment)
df

ID   TreatmentDate   Treatment
111   12/12/2010     AA
111   01/12/2011     BB
222   07/08/2009     CC
222   07/05/2010     DD
222   07/03/2011     AA
222   05/08/2011     BB
222   27/08/2013     BB
222   03/09/2016     CC

我还有另一个数据显示每个主题的测试日期:

代码语言:javascript
复制
UID<-c(111,222)
Testdate<-as.Date(c("2012-12-31","2014-12-31"))
SubjectTestDate<-data.frame(UID,Testdate) 

我试图总结这些数据,比如说,如果我想知道一个受试者在测试日期之前接受了多少次治疗,我会得到这样的结果,我想把它导出到一个弹射表中。

代码语言:javascript
复制
ID     Prior_to_date      TreatmentAA   TreatmentBB    TreatmentCC    TreatmentDD
111       31/12/2012           1             1              0              0
222       31/12/2014           1             2              1              1

任何帮助都将不胜感激!!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-22 14:32:43

我们可以用'ID‘连接两个数据集,创建一个检查条件('indx')的列,并使用dcast将'long’转换为'wide‘格式

代码语言:javascript
复制
library(data.table)#v1.9.5+
 dcast(setkey(setDT(df), ID)[SubjectTestDate][,
     indx:=sum(TreatmentDate <=Testdate) , list(ID, Treatment)], 
       ID+Testdate~ paste0('Treatment', Treatment), value.var='indx', length)
#    ID   Testdate TreatmentAA TreatmentBB TreatmentCC TreatmentDD
#1: 111 2012-12-31           1           1           0           0
#2: 222 2014-12-31           1           2           2           1

更新

根据修改后的'df',我们将'df‘与'SubjectTestDate’连接起来,像以前一样创建'indx‘列,以及一个序列列'Seq',按'ID’和‘处理’分组,使用dcast,然后用unique删除重复的'ID‘行。

代码语言:javascript
复制
  unique(dcast(setkey(setDT(df), ID)[SubjectTestDate][, 
    c('indx', 'Seq') := list(sum(TreatmentDate <= Testdate), 1:.N) ,
    .(ID, Treatment)], ID+ Seq+ Testdate ~ paste0('Treatment', 
            Treatment), value.var='indx', fill=0), by='ID')
  #    ID Seq   Testdate TreatmentAA TreatmentBB TreatmentCC TreatmentDD
  #1: 111   1 2012-12-31           1           1           0           0
  #2: 222   1 2014-12-31           1           2           1           1
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30399238

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档