转换数据帧以进行时变分析

Sha*_*wan 2 pivot r tidyr

我想将我的数据框从按列转换为按行

structure(list(ID = 1:2, Age = c(45L, 60L), SGLT_v1_0_3 = 1:0, 
    SGLT_time_0_3 = c(92L, 92L), SGLT_v1_3_6 = 0:1, SGLT_time_3_6 = c(183L, 
    183L), SGLT_v1_6_9 = 1:0, SGLT_time_6_9 = c(285L, 285L)), class = "data.frame", row.names = c(NA, 
-2L))

  ID Age SGLT_v1_0_3 SGLT_time_0_3 SGLT_v1_3_6
1  1  45           1            92           0
2  2  60           0            92           1
  SGLT_time_3_6 SGLT_v1_6_9 SGLT_time_6_9
1           183           1           285
2           183           0           285
Run Code Online (Sandbox Code Playgroud)

我希望数据框看起来像:

  ID Age SGLT_time SGLT_v1
1  1  45   92     1
2  2  60   92     0
3  1  45  183     0
4  2  60  183     1
5  1  45  285     1
6  2  60  285     0
Run Code Online (Sandbox Code Playgroud)

我尝试了pivot_longer,但似乎无法得到正确的结果,因为它没有提供正确的数据。我试图对我的数据帧执行时变分析,但在进行任何分析之前需要数据采用行格式。感谢任何帮助

小智 5

您可以使用pivot_longer()

library(tidyr)
df |> 
  pivot_longer(
    contains("SGLT_"),
    names_to = ".value",
    names_pattern = "(SGLT_time|SGLT_v1)"
  ) 

Run Code Online (Sandbox Code Playgroud)

输出

     ID   Age SGLT_v1 SGLT_time
  <int> <int>   <int>     <int>
1     1    45       1        92
2     1    45       0       183
3     1    45       1       285
4     2    60       0        92
5     2    60       1       183
6     2    60       0       285
Run Code Online (Sandbox Code Playgroud)

数据

structure(list(ID = 1:2, Age = c(45L, 60L), SGLT_v1_0_3 = 1:0, 
    SGLT_time_0_3 = c(92L, 92L), SGLT_v1_3_6 = 0:1, SGLT_time_3_6 = c(183L, 
    183L), SGLT_v1_6_9 = 1:0, SGLT_time_6_9 = c(285L, 285L)), class = "data.frame", row.names = c(NA, 
-2L))
Run Code Online (Sandbox Code Playgroud)