生效日期:

      code<-c("ABC")

      DT<-data.table::data.table(
              ID = c(1L, 1L, 1L, 1L, 1L),
       INDX_DATE = c("2010-10-10","2010-10-11","2010-10-12",
                     "2010-10-13","2010-10-13"),
             ATC = c("ABC123", "ABC12", "ABC", "DEF", NA),
        ATC_DATE = c("2005-05-05","2011-11-11","2012-12-12",
                     "2011-11-11","2005-05-05")
    )

请注意,情况并非如此.

   ID  INDX_DATE    ATC   ATC_DATE NR
1:  1 2010-10-10 ABC123 2005-05-05  2
2:  1 2010-10-11  ABC12 2011-11-11  2
3:  1 2010-10-12    ABC 2012-12-12  2
4:  1 2010-10-13    DEF 2011-11-11  2
5:  1 2010-10-13   <NA> 2005-05-05  2

逻辑:

我想计算ATCcode中定义的值开始的事件的nr,以及ATC_DATE > INDX_DATE开始的事件的nr.NR中汇总了每ID个事件(唯一日期)的总数.

最好是快速(data.table)解决方案,因为我的数据集很大.

♪H♪

推荐答案

创建一个逻辑向量,按‘ID’分组后得到计数的sum

library(data.table)
DT[, NR := sum(grepl(paste0("^", code), ATC) &
    ATC_DATE > INDX_DATE, na.rm = TRUE), ID]

-输出

> DT
   ID  INDX_DATE    ATC   ATC_DATE NR
1:  1 2010-10-10 ABC123 2005-05-05  2
2:  1 2010-10-11  ABC12 2011-11-11  2
3:  1 2010-10-12    ABC 2012-12-12  2
4:  1 2010-10-13    DEF 2011-11-11  2
5:  1 2010-10-13   <NA> 2005-05-05  2

如果有多个代码

DT[, NR := sum(Reduce(`|`, lapply(paste0("^", code),
  \(x) grepl(x, ATC))) & ATC_DATE > INDX_DATE, na.rm = TRUE), ID]

R相关问答推荐

给定R中另一行中的值,如何插补缺失值

在ComplexHeatmap中,如何更改anno_barplot()标题的Angular ?

查找满足SpatRaster中条件的单元格位置

gt()从gt为相同内容的单元格 colored颜色 不同?

如何删除gggvenn与gggplot绘制的空白?

如何使用列表中多个列表中的第一条记录创建数据框

如何根据数据帧中的值从该数据帧中提取值?

在保留列表元素属性的同时替换列表元素

R -如何分配夜间GPS数据(即跨越午夜的数据)相同的开始日期?

如果COLSUM为>;0,则COLNAME为向量

警告消息";没有非缺失的参数到min;,正在返回数据中的inf";.表分组集

将具有坐标列表列的三角形转换为多个多边形

将工作目录子文件夹中的文件批量重命名为顺序

自定义交互作用图的标签

在生成打印的自定义函数中,可以通过变量将线型或 colored颜色 设置为NULL吗?

R-找出存在其他变量的各种大小的所有组合

R try Catch in the loop-跳过缺少的值并创建一个DF,显示跳过的内容

替换在以前工作的代码中有x行&q;错误(geom_sf/gganimate/dow_mark)

我有2011-2022年的年度数据.如何计算最低年份和最高年份之间的差额?

从字符串列中的向量中查找第一个匹配的单词