R语言 不包括基于给药的测量

g6ll5ycj  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(104)

我正在对一个庞大的医学数据集进行数据分析。我试图将我的头围绕以下问题。任务是只包括在给药前进行的蛋白质测量(其中药物== 1)。
代表性数据集:

dataset <- structure(
            list(
Participant.Id = 1:5,

HR_date_1 = as.Date(c("15-06-2013", "02-03-2013", "20-10-2012", "07-08-2015", "03-09-2014"), format = "%d-%m-%Y"),
HR_date_2 = as.Date(c("15-06-2014", "02-03-2014", "20-10-2013", "07-08-2016", "05-06-2017"), format = "%d-%m-%Y"),
HR_date_3 = as.Date(c("15-06-2017", "21-06-2015", NA, "17-03-2017", NA), format = "%d-%m-%Y"),
HR_date_4 = as.Date(c("15-06-2018", "02-03-2016", NA, "07-08-2018", NA), format = "%d-%m-%Y"),
HR_date_5 = as.Date(c(NA, "02-03-2019", NA, "07-08-2021", NA), format = "%d-%m-%Y"),
HR_date_6 = as.Date(c(NA, NA, NA, NA, NA), format = "%d-%m-%Y"),

HR_value_1 = c(10L, 20L, 30L, 40L, 50L),
HR_value_2 = c(15L, 25L, 35L, 45L, 55L),
HR_value_3 = c(20L, 25L, NA, 45L, NA),
HR_value_4 = c(25L, 30L, NA, 50L, NA),
HR_value_5 = c(NA, 35L, NA, 55L, NA),
HR__value_6 = c(NA, 35L, NA, NA, NA),

trial_participation = as.Date(c("16-06-2014", NA, "10-06-2015", "30-07-2016", "10-08-2018"), format = "%d-%m-%Y"),
drug =                c("1", "0", "1", "0", "0"),

                       
protein_date_1 = as.Date(c("25-06-2011", "10-03-2013", "20-10-2013", "07-08-2014", "15-09-2014"), format = "%d-%m-%Y"),
protein_date_2 = as.Date(c("16-06-2013", "21-03-2014", "05-03-2017", "07-08-2015", "03-06-2017"), format = "%d-%m-%Y"),
protein_date_3 = as.Date(c("16-06-2014", "10-06-2015", NA, "30-07-2016", "10-08-2018"), format = "%d-%m-%Y"),
protein_date_4 = as.Date(c("15-06-2018", "05-04-2016", NA, "07-08-2018", NA), format = "%d-%m-%Y"),
protein_date_5 = as.Date(c(NA, "02-03-2019", NA, NA, NA), format = "%d-%m-%Y"),
protein_date_6 = as.Date(c(NA, NA, NA, NA, NA), format = "%d-%m-%Y"),

protein_A_1 = c(100L, 200L, 300L, 400L, 500L),
protein_A_2 = c(110L, 210L, 310L, 410L, 510L),
protein_A_3 = c(120L, 220L, NA, 420L, 520L),
protein_A_4 = c(130L, 230L, NA, 430L, NA),
protein_A_5 = c(NA, 240L, NA, NA, NA),
protein_A_6 = c(NA, NA, NA, NA, NA),
 
protein_B_1 = c(101L, 201L, 301L, 401L, 501L),
protein_B_1 = c(111L, 211L, 311L, 411L, 511L),
protein_B_1 = c(121L, 221L, NA, 421L, 521L),
protein_B_1 = c(131L, 231L, NA, 431L, NA),
protein_B_1 = c(NA, 241L, NA, NA, NA),
protein_B_1 = c(NA, NA, NA, NA, NA),

protein_C_1 = c(102L, 202L, 302L, 402L, 502L),
protein_C_1 = c(112L, 212L, 312L, 412L, 512L),
protein_C_1 = c(122L, 222L, NA, 422L, 522L),
protein_C_1 = c(132L, 232L, NA, 432L, NA),
protein_C_1 = c(NA, 242L, NA, NA, NA),
protein_C_1 = c(NA, NA, NA, NA, NA)),

字符串
class =“data.frame”,row.names = c(NA,-5L))
对于药物== 1的受试者,我想检查是否在试验参与日期当天或之后进行了任何蛋白质测量。如果蛋白质测量日期与试验参与日期匹配或在试验参与日期之后,则该受试者的特定蛋白质测量(对于Id,例如A4-6,B4-6,C4-6)不应包含在最终数据集中。
我想做的是
1.确定药物== 1的受试者。
1.对于这些受试者,将试验参与日期与蛋白质测量日期进行比较。
1.在药物== 1的情况下,计算每例受试者在试验参与日期当天或之后进行的相关蛋白测量值。(例如,如果药物==1,试验日期为01-01-2020,我希望代码检查每个参与者的日期是否为==或>=,如果这是例如日期_3,排除蛋白质_A_3 -6,蛋白质_B_3 -6,和蛋白质_C_3 -6)
1.我确实想包括药物== 0的受试者的所有数据。
我很想听听你的想法!如果我的问题不清楚,请告诉我,我会尝试更新它。

jdg4fx2g

jdg4fx2g1#

如果您将数据转换为长格式,这会容易得多。这里有一个tidyverse解决方案:

library(dplyr)
library(tidyr)

dataset <- dataset %>%
  pivot_longer(
    !c(Participant.Id, trial_participation, drug),
    names_to = c(".value", "time"),
    names_pattern = "(.+)_([^_]$)"
  ) %>%
  mutate(across(
    protein_A:protein_C,
    \(x) if_else(drug == 1 & protein_date >= trial_participation, NA, x)
  ))

字符串
从这里开始,如果分析需要,你可以回到宽格式,但否则我会保持它的长度。如果你确实需要回到宽格式:

dataset <- dataset %>%
  pivot_wider(
    names_from = time,
    values_from = HR_date:protein_C
  )

相关问题