R 中的旋转/转置

问题描述 投票:0回答:1

以下是示例数据集:

data.frame(
  Index = seq(1,5),
  X_50 = sample(1:5, replace = TRUE),
  X_90 = sample(1:5, replace = TRUE),
  Y_50 = sample(1:5, replace = TRUE),
  Y_90 = sample(1:5, replace = TRUE),
  Z_50 = sample(1:5, replace = TRUE),
  Z_90 = sample(1:5, replace = TRUE)
)
索引 X_50 X_90 Y_50 Y_90 Z_50 Z_90
1 3 5 1 10 3 4
2 8 8 6 6 9 7
3 9 3 3 7 7 4
4 3 10 8 10 6 1
5 7 2 3 5 10 8

我正在尝试将数据集的列旋转为如下所示:

索引 百分位值 X Z
1 50 3 1 3
1 90 5 10 4
2 50 8 6 9
2 90 8 6 7
3 50 9 3 7
3 90 3 7 4

等等...

我尝试了pivot_longer,但没有得到上述结果。有人可以帮我吗?谢谢。

r dplyr pivot
1个回答
0
投票

您可以使用

pivot_longer()
包中的
tidyr
函数。

library(tidyr)

df <- data.frame(
        Index = seq(1,5),
        X_50 = sample(1:5, replace = TRUE),
        X_90 = sample(1:5, replace = TRUE),
        Y_50 = sample(1:5, replace = TRUE),
        Y_90 = sample(1:5, replace = TRUE),
        Z_50 = sample(1:5, replace = TRUE),
        Z_90 = sample(1:5, replace = TRUE)
)

df
#>   Index X_50 X_90 Y_50 Y_90 Z_50 Z_90
#> 1     1    2    1    3    5    2    5
#> 2     2    4    1    3    1    4    2
#> 3     3    2    5    5    4    5    2
#> 4     4    1    5    1    5    3    3
#> 5     5    1    2    1    2    1    1

df |> pivot_longer(cols = -Index, 
                   names_to = c(".value", "percentile_value"),
                   names_sep = "_") 
#> # A tibble: 10 × 5
#>    Index percentile_value     X     Y     Z
#>    <int> <chr>            <int> <int> <int>
#>  1     1 50                   2     3     2
#>  2     1 90                   1     5     5
#>  3     2 50                   4     3     4
#>  4     2 90                   1     1     2
#>  5     3 50                   2     5     5
#>  6     3 90                   5     4     2
#>  7     4 50                   1     1     3
#>  8     4 90                   5     5     3
#>  9     5 50                   1     1     1
#> 10     5 90                   2     2     1

创建于 2024-04-25,使用 reprex v2.1.0

© www.soinside.com 2019 - 2024. All rights reserved.