我有一个数据集,其中包括为每位患者收集的多个生物样本,但在数据输出中,所有样本都位于同一行。我想操纵数据,使每个样本都在自己的行中。
数据框当前如下所示:(这是数据的简化假版本)
Patient_ID Patient_name Sample_1_ID Sample_1_value1 Sample_1_value2 Sample_2_ID Sample_2_value1 Sample_2_value2 Sample_3_ID Sample_3_value1 Sample_3_value2
AB100 AB CSF 1.0 2.0 CSF 2.0 3.0 CSF 2.0 4.0
JM200 JM CSF 2.0 3.0 CSF 4.0 5.0 CSF 3.0 4.0
我希望最终的数据框看起来像:
Patient_ID Patient_name Sample_ID Sample_value1 Sample_value2
AB100 AB CSF 1.0 2.0
AB100 AB CSF 2.0 3.0
AB100 AB CSF 2.0 4.0
JM200 JM CSF 2.0 3.0
JM200 JM CSF 4.0 5.0
JM200 JM CSF 3.0 4.0
我尝试使用 dplyr 的
add_row()
函数来执行此操作,但我不知道如何在仅向下移动样本数据的同时复制患者标识符行。
提前谢谢您。
这个概念称为将数据转换为“长格式”
下面是完成此操作的 R 语法:
我们将使用 tidyverse
library(tidyverse)
long_df <- df %>%
pivot_longer(
cols = -c(Patient_ID, Patient_name),
names_to = c(".value", "set"),
names_pattern = "(.*)_(.*)"
)