我正在研究医疗保健数据。为简单起见,我仅提供一个患者ID的数据。每位患者都有一个唯一的ID,在一段时间内,医生会监控BCR_ABL值,如下表所示。
structure(list(PatientId = c("Hospital1_124", "Hospital1_124",
"Hospital1_124", "Hospital1_124", "Hospital1_124", "Hospital1_124",
"Hospital1_124"), TestDate = c("2007-11-13", "2008-09-01", "2011-02-24",
"2013-05-01", "2016-02-16", "2017-05-12", "2017-08-29"), BCR_ABL = c(0.029,
0, 0, 0, 0, 100, 0)), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -7L), .Names = c("PatientId", "TestDate",
"BCR_ABL"))
在治疗开始时,每位患者的BCR_ABL值均为100,理想情况下,治疗后,该值应下降至0.患者在TestDate
列所示的不同阶段接受BCR_ABL检测
患者还到医院进行随访,这记录在另一张表中,其中包含随访日期以及开始服药的日期。该表如下所示:
structure(list(PatientId = c("Hospital1_124", "Hospital1_124",
"Hospital1_124", "Hospital1_124"), FollowupDate = structure(c(11323,
17298, 17407, 17553), class = "Date"), dateofStarting = structure(c(11323,
17318, 17318, 17318), class = "Date"), nameTKI = c("Imatinib",
"Imatinib", "Imatinib", "Imatinib"), brandTKI = c("Glivec", "Glivec",
"Glivec", "Glivec"), dailydose = c("100", "400", "400", "400"
)), class = "data.frame", row.names = c(NA, -4L), .internal.selfref = <pointer: 0x0>, .Names = c("PatientId",
"FollowupDate", "dateofStarting", "nameTKI", "brandTKI", "dailydose"
))
现在分析的目的是找出处方药(nameTKI
)的功效。在我看来,最佳表示是一个折线图,x轴为Date
,y轴为BCR_ABL
。但是,我仍然坚持如何结合日期。我正在查看一个包含以下变量的新表:PatientId
,Date
,BCR_ABL
,nameTKI
,brandTKI
和dailydose
。我不认为跟进日期太重要了。因此,Date
变量必须是来自第一个表的TestDate
和来自第二个表的dateofStarting
的组合,按时间顺序排列所有个体患者(我可以使用{group_by()
1}}为此)。 BCR_ABL
的值将从100开始,直到第一次测试后获得的值,然后跟随所有Date
条目的值。
我一直在尝试来自join
的各种dplyr
,但没有成功。非常感谢一些帮助。
答案 0 :(得分:0)
有点难以遵循您的代码,但您可以使用PatientId作为主键将表连接在一起。但是,您也应该仔细考虑数据的结构。如果第一个表位于患者/测试级别,而第二个表位于患者级别;为什么单个PatientId有多个dateofStarting值?
library(tidyverse)
t1 <- data.frame(PatientId = rep("Hospital1_124", 7),
TestDate = as.Date(c("2007-11-13", "2008-09-01", "2011-02-24", "2013-05-01",
"2016-02-16", "2017-05-12", "2017-08-29")),
BCR_ABL = c(0.029, 0, 0, 0, 0, 100, 0),
stringsAsFactors = FALSE)
t2 <- data.frame(PatientId = rep("Hospital1_124", 4),
FollowupDate = as.Date(c(11323, 17298, 17407, 17553), origin = "1970-01-01"),
dateofStarting = as.Date(c(11323, 17318, 17318, 17318), origin = "1970-01-01"),
nameTKI = rep("Imatinib", 4),
brandTKI = rep("Glivec", 4),
dailydose = c(100, 400, 400, 400),
stringsAsFactors = FALSE)
data <- t2 %>%
select(-FollowupDate) %>%
inner_join(t1, by = c("PatientId" = "PatientId"))