如何使用pivot_longer保存到多列?

how to use pivot_longer to save to multiple columns?

假设我有一个类似这样的 df:

# A tibble: 5 x 6
     x1    x2    x3    y1    y2    y3
  <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1     4     3     2     4     3     2
2     4     3     2     4     3     2
3     4     3     2     4     3     2
4     4     3     2     4     3     2
5     4     3     2     4     3     2

有没有办法在单个 pivot_longer 命令中创建包含 x、y、z 列的小标题?现在我正在为每组列使用 pivot_longer 行但我相信有更简单的方法来获得它。

      x     y     z
   <dbl> <dbl> <dbl>
 1     4     4     1
 2     4     4     1
 3     4     4     1
 4     4     4     1
 5     4     4     1
 6     3     3     2
 7     3     3     2
 8     3     3     2
 9     3     3     2
10     3     3     2
11     2     2     3
12     2     2     3
13     2     2     3
14     2     2     3
15     2     2     3

您可以使用基数 R 的重塑:

reshape(inp, direction="long", varying=list(1:3, 4:6), sep="")
    time x1 y1 id
1.1    1  4  4  1
2.1    1  4  4  2
3.1    1  4  4  3
4.1    1  4  4  4
5.1    1  4  4  5
1.2    2  3  3  1
2.2    2  3  3  2
3.2    2  3  3  3
4.2    2  3  3  4
5.2    2  3  3  5
1.3    3  2  2  1
2.3    3  2  2  2
3.3    3  2  2  3
4.3    3  2  2  4
5.3    3  2  2  5

两个“绝招”。一种是使用 sep="",它将这些列名称拆分为字母和数字。其次是使用列表参数来改变。如果要删除标识原始行的第一列,请使用 [-1]。您还可以使用 v.names 向量来命名列,即:

   reshape(inp, direction="long", varying=list(1:3, 4:6), sep="", v.names=c("X","Y"))[-1]
    X Y id
1.1 4 4  1
2.1 4 4  2
3.1 4 4  3
4.1 4 4  4
5.1 4 4  5
1.2 3 3  1
2.2 3 3  2
3.2 3 3  3
4.2 3 3  4
5.2 3 3  5
1.3 2 2  1
2.3 2 2  2
3.3 2 2  3
4.3 2 2  4
5.3 2 2  5

如果您正在使用 pivot_longer:

df %>% pivot_longer(everything(), names_to = c(".value", "z"), names_pattern = "(.)(.)")