R语言 如何重塑数据集并提取日期,HbA1c和月份进行分析?

e4eetjau  于 2023-11-14  发布在  其他
关注(0)|答案(1)|浏览(89)

新来的R!
我有一个数据集,看起来像这样。

Df <- structure(list(Pat_ID = c("1123", "1134", "1138", "1139"),
               study_group = c("1", "1", "0", "0"),
               days_1 = c("-329", "-261", "0", "-165"),
               HbA1c_Date_1 = c("11/7/2018", "31/10/2018", "28/8/2019", "17/05/2019"),
               HbA1c_1= c("8.8", "7", "11.1", "10.1" ),
               days_2= c("-196", "-168", "NA", "0"),
               HbA1c_Date_2= c("3/20/2019", "01/02/2019", "NA", "29/10/19"),
               HbA1c_2= c("9.1", "7.7", "NA", "11.9"),
               days_3= c("-105", "0", "NA", "85"),
               HbA1c_Date_3= c("6/19/2019","27/02/2019", "NA", "22/01/2020"),
               HbA1c_3= c("9.1", "11.1", "NA", "8.4"),
               days_4= c("0", "89", "NA", "NA"),
               HbA1c_Date_4= c("10/2/2019", "19/07/2019", "NA", "NA"),
               HbA1c_4= c("9.2", "10.1", "NA", "NA"),
               days_5= c("97", "168", "NA", "NA"),
               HbA1c_Date_5= c("1/7/2020", "16/10/2019", "NA", "NA"),
               HbA1c_5= c("9.1", "8.1", "NA", "NA" ),
               baseline = c("0", "0", "0", "0"),
               followup_1 = c("97", "89", "NA", "85"),
               followup_2 = c("NA", "168", "NA", "NA"),
               followup_3 = c("NA", "NA", "NA", "NA"),
               followup_4 = c("NA", "NA", "NA", "NA"),
               followup_5 = c("NA", "NA", "NA", "NA"),
               followup_6 = c("NA", "NA", "NA", "NA"),
               followup_7 = c("NA", "NA", "NA", "NA"),
               X0_month = c("1", "1", "1", "1"),
               X1_month = c("0", "0", "0", "NA"),
               X2_month = c("0", "0", "0", "NA"),
               X3_month = c("0", "1", "0", "NA"),
               X4_month = c("1", "0", "0", "1"),
               X5_month = c("0", "0", "0", "NA"),
               X6_month = c("0", "1", "0", "NA")), class = "data.frame", row.names = c(NA, -4L))

字符串
这是一个示例数据集。
其中:
PAt_ID是唯一的患者ID。Study_group表示干预组(1)或对照组(0)。HbA1c_Date_1、HbA1c_Date_2等是进行HbA 1c检测的日期。HbA1c_1、HbA1c_2等是相应的HbA 1c值。days_1、days_2等,表示与索引日期的时间差。baseline包含基线天数(从值为0的days_ columns导出)。followup_1、followup_2等表示距离基线的天数。month列是分类列,表示访视发生在哪个月。
输出数据集将集中在“baseline”、“followup”和“month”列。“baseline”和“followup”列包含天数(从“days
”列中提取)。我希望R扫描“days_”列,并为每个患者提取相应天数的HbA 1c Date和HbA 1c Value。由于我的原始数据集是转置的/宽的,我希望它更长。
我需要重塑这个数据集,以创建一个具有以下结构的新数据集:
| 患者ID|学习小组|HbA 1c日期|HbA1c|月|
| --|--|--|--|--|
| 1123 | 1 |2019年10月2日|9.2| 0_month|
| 1123 | 1 |2020年1月7日|9.1| 4个月|
| 1134 | 1 |2019年2月27日|十一点一|0_month|
| 1134 | 1 |2019 - 07 - 19| 10.1| 3个月|
| 1134 | 1 |2019年10月16日|8.1| 6个月|
| 1138 | 0 |2019 - 08 - 28|十一点一|0_month|
| 1139 | 0 |29/10/19|十一点九|0_month|
| 1139 | 0 |2020年1月22日|8.9| 4个月|
我累了循环,但它并不适合我。

oug3syen

oug3syen1#

这里有一些东西可以帮助你开始。
不使用循环,您可以使用tidyr(tidyverse的一部分)中的pivot_longer来放入长格式。模式将关注日期和以数字结尾的A1 c值。values_transform将天放入数字格式-但会抛出警告,因为该列中有“NA”字符值而不是NA符号。
看起来您只想保留0天后的A1 c值,因此filter可以在基线评估之前删除这些实验室值。接下来,mutate将为给定患者的每个A1 c值添加一个计数器。
最后的结果将与从X0_monthX6_month数据派生的第二个data.frame结合使用,因此它可以被稍微不同地处理。在这里,您可以再次使用pivot_longer,但然后filter,其中值为“1”(并省略“0”)。计数器可以再次应用于每个患者。
加入后,select将允许您包含感兴趣的列(按照您想要的顺序)。
我没有解决其他格式问题(日期不是日期格式,月份作为数字月份值可能更好)。

library(tidyverse)

Df |>
  pivot_longer(cols = -Pat_ID, 
               names_to = c(".value", "time"), 
               names_pattern = "(\\w+)_(\\d+)", 
               values_transform = list(days = as.numeric), 
               values_drop_na = TRUE) |>
  filter(days >= 0) |>
  mutate(time_point = row_number(), .by = Pat_ID) |>
  inner_join(
    Df |>
      select(Pat_ID, study_group, X0_month:X6_month) |>
      pivot_longer(-c(Pat_ID, study_group), names_to = "Month") |>
      filter(value == "1") |>
      mutate(time_point = row_number(), .by = Pat_ID),
    by = c("Pat_ID", "time_point")
  ) |>
  select(Pat_ID, study_group, HbA1c_Date, HbA1c, Month)

字符串

输出

Pat_ID study_group HbA1c_Date HbA1c Month   
  <chr>  <chr>       <chr>      <chr> <chr>   
1 1123   1           10/2/2019  9.2   X0_month
2 1123   1           1/7/2020   9.1   X4_month
3 1134   1           27/02/2019 11.1  X0_month
4 1134   1           19/07/2019 10.1  X3_month
5 1134   1           16/10/2019 8.1   X6_month
6 1138   0           28/8/2019  11.1  X0_month
7 1139   0           29/10/19   11.9  X0_month
8 1139   0           22/01/2020 8.4   X4_month

相关问题