【发布时间】:2021-11-05 05:17:07
【问题描述】:
我正在处理药物注册数据。我想计算诊断前开具的口服药物剂量。在示例数据中,dia_date 代表诊断日期,ddd 代表剂量。
df1 <- tribble(
~id, ~drug_group, ~drug_type, ~prescribed_date, ~dia_date, ~ddd,
1, "A", "oral", 2010, 2020, 1,
1, "B", "non-oral", 2011, 2020, 2,
2, "A", "oral", 2019, 2020, 1,
2, "B", "oral", 2019, 2020, 1,
2, "C", "oral", 2008, 2021, 2,
3, "A", "oral", 2021, 2020, 2,
3, "C", "non-oral", 2009, 2021, 2,
4, "A", "oral", 2010, 2020, NA )
输出应该是这样的
df2 <- tribble(
~id, ~drug_group, ~drug_type, ~prescribed_date, ~dia_date, ~ddd, ~ddd_a, ~ddd_b, ~ddd_c,
1, "A", "oral", 2010, 2020, 1, 1, 0, 0,
1, "B", "non-oral", 2011, 2020, 2, 0, 0, 0,
2, "A", "oral", 2019, 2020, 1, 1, 0, 0,
2, "B", "oral", 2019, 2020, 1, 0, 1, 0,
2, "C", "oral", 2008, 2021, 2, 0, 0, 2,
3, "A", "oral", 2021, 2020, 2, 0, 0, 0,
3, "C", "non-oral", 2009, 2021, 2, 0, 0, 0,
4, "A", "oral", 2010, 2020, NA, 0, 0, 0 )
在实际数据集中,药物组数>20。 我尝试了以下代码,但无济于事。
##Attempt1
for (col in c("a","b","c")){
ddd_= paste0("ddd_",col)
df1[,ddd_] = df1$ddd
}
for (i in c("ddd_a","ddd_b","ddd_c")){
if (df1$prescribed_date>df1$dia_date & df1$drug_group!="oral"){
df1[,i] <- 0
}
}
##Attempt2
for (col in c("a","b","c")){
ddd_= paste0("ddd_",col)
df1[,ddd_] = df1$ddd
}
f <- function (x) ifelse(df1$prescribed_date>df1$dia_date & df1$drug_group!="oral",0,x)
df1 %>% mutate(across(starts_with("ddd_")), f)
如果有任何帮助,我将不胜感激。
【问题讨论】:
-
为什么
id3 atdrug_group"A" 没有 2 剂ddd_a? -
在诊断 (2020) 后开具了 id 3 的药物组“A” (2021)。这就是为什么它被排除在外,因为我想要诊断前的药物暴露。
-
编辑我的帖子以符合该要求