如何使用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 = "(.)(.)")
假设我有一个类似这样的 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 = "(.)(.)")