在 R 中创建治疗序列并汇总不完整数据

问题描述 投票:0回答:1

对于相关的人来说,

我有一个数据集,如下所示,其中包含患者 ID、使用的药物、起始日期、截止日期和频率。但是,某些数据未汇总,且缺少最新数据和频率:

id  drug    fromdate todate frequency
1   A   1   15  3
1   B   23      
1   B   26      
1   B   29      
1   A   47  60  2
2   C   101     
2   C   102     
2   C   103     
2   A   107 120 3

我想要以下整理的数据。有人可以分享一些想法吗?

id  drug    fromdate todate frequency sequence
1   A   1   15  3   1
1   B   23  29  3   2
1   A   47  60  2   3
2   C   101 103 3   1
2   A   107 120 3   2

我尝试使用滞后函数和 dplyr,但它似乎不起作用

r dplyr sequence lag
1个回答
0
投票

这是

data.table
单行中的部分解决方案。我无法弄清楚您期望的频率输出背后的逻辑,因此您可能需要调整填写 NA 的答案。

library(data.table)
# if not already data.table format, uncomment line below
#   setDT(mydata)
# 
mydata[, .(fromdate = min(fromdate),
       todate = if(is.na(max(todate))) max(fromdate) else todate, 
       freq = frequency[1]),
       by=.(id, drug = rleid(drug))]

#       id  drug fromdate todate  freq
#    <int> <int>    <int>  <int> <int>
# 1:     1     1        1     15     3
# 2:     1     2       23     29    NA
# 3:     1     3       47     60     2
# 4:     2     4      101    103    NA
# 5:     2     5      107    120     3

样本数据

mydata <- data.table::fread("id  drug    fromdate todate frequency
1   A   1   15  3
1   B   23      
1   B   26      
1   B   29      
1   A   47  60  2
2   C   101     
2   C   102     
2   C   103     
2   A   107 120 3", sep = " ", fill = TRUE)
© www.soinside.com 2019 - 2024. All rights reserved.