对于相关的人来说,
我有一个数据集,如下所示,其中包含患者 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,但它似乎不起作用
这是
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)