转置数据框中的特定列

Mig*_*nau 5 r dataframe dplyr

如何将 data.frame 中的特定列转置为:

id<- c(1,2,3)
t0<- c(0,0,0)
bp0<- c(88,95,79)
t1<- c(15,12,12)
bp1<- c(92,110,82)
t2<- c(25,30,20)
bp2<- c(75,99,88)

df1<- data.frame(id, t0, bp0, t1, bp1, t2, bp2)
df1

> df1
  id t0 bp0 t1 bp1 t2 bp2
1  1  0  88 15  92 25  75
2  2  0  95 12 110 30  99
3  3  0  79 12  82 20  88

In order to obtain: 

> df2
  id  t  bp
1  1  0  88
2  2  0  95
3  3  0  79
4  1 15  92
5  2 12 110
6  3 12  82
7  1 25  75
8  2 30  99
9  3 20  88

Run Code Online (Sandbox Code Playgroud)

为了获得df2,用t(t0,t1,t2)和bp(bp0,bp1,bp2)表示对应的“id”

lov*_*ery 4

使用Base R,您可以执行以下操作:

雷普莱克斯

  • 代码
df2 <- cbind(df1[1], stack(df1, startsWith(names(df1), "t"))[1], stack(df1,startsWith(names(df1), "bp"))[1])

names(df2)[2:3] <- c("t", "bp")
Run Code Online (Sandbox Code Playgroud)
  • 输出
df2
#>   id  t  bp
#> 1  1  0  88
#> 2  2  0  95
#> 3  3  0  79
#> 4  1 15  92
#> 5  2 12 110
#> 6  3 12  82
#> 7  1 25  75
#> 8  2 30  99
#> 9  3 20  88
Run Code Online (Sandbox Code Playgroud)

由reprex 包于 2022 年 2 月 14 日创建(v2.0.1)