R:按 1 列熔化数据框并堆叠具有相同名称模式的其他列

R: Melt dataframe by 1 column and stack the other columns that have the same name patterns

我有这种简化的数据情况:

df <- data.frame(Year = 1:3,
                 A.x = 4:6,
                 A.y = 7:9,
                 A.z = 10:12,
                 B.x = 4:6,
                 B.y = 7:9,
                 B.z = 10:12,
                 C.x = 4:6,
                 C.y = 7:9,
                 C.z = 10:12)

我的目标是:

df_goal <- data.frame(Year = rep(1:3, each = 3),
                 x = rep(4:6, each = 3),
                 y = rep(7:9, each = 3),
                 z = rep(10:12, each = 3))

请注意,这些值是任意的,只有列名称、模式和目标年份的顺序很重要。

我试图“手动”创建目标数据框,例如:列 i 包含从位置 xz原始数据集。但它看起来真的很笨拙,因为我正在处理的数据非常庞大。有没有更好的方法可以更系统地重塑数据?

非常感谢!

我们可以使用pivot_longer

library(dplyr)
library(tidyr)
 df %>% 
   pivot_longer(cols = -Year, names_to = ".value", 
      names_pattern = "^[^.]+\.(.*)")

# A tibble: 9 × 4
   Year     x     y     z
  <int> <int> <int> <int>
1     1     4     7    10
2     1     4     7    10
3     1     4     7    10
4     2     5     8    11
5     2     5     8    11
6     2     5     8    11
7     3     6     9    12
8     3     6     9    12
9     3     6     9    12