现有一个检验数据框,但由于一个患者有很多的检查项目,如何将这个复杂的数据框转为一个患者占用一行,这个患者的所有检查项目为列名

现有一个检验数据框,列名为患者唯一号,检验项目,检验结果,参考范围等,但由于一个患者有很多的检查项目,所以一个患者占用很多行,如何将这个复杂的数据框转为一个患者占用一行,这个患者的所有检查项目为列名。即每一行为一个患者所有的检查项目结果。

该回答引用GPTᴼᴾᴱᴺᴬᴵ
可以使用R语言中的tidyr和dplyr库来实现这个任务。具体步骤如下:

1.使用pivot_wider函数将检验项目转化为列名,同时将检验结果也作为列来填充。
2.使用group_by函数和summarize函数将每个患者的检验项目结果合并到一个行中。

下面是具体的代码实现:

library(tidyr)
library(dplyr)

# 假设原始数据框名为df,列名分别为patient_id, test_item, test_result
# 将检验项目转化为列名,同时将检验结果作为列来填充
df_wide <- pivot_wider(df, names_from = test_item, values_from = test_result)

# 将同一个患者的检验项目结果合并到一个行中
df_final <- df_wide %>%
  group_by(patient_id) %>%
  summarize(across(everything(), ~first(na.omit(.))))


这样就能得到一个每行代表一个患者,列名为该患者的所有检验项目,值为该患者对应检验项目的结果的数据框。

这个是典型的纵表转横表的问题,搜索下就有现成的代码。