我希望在下面的tibble中使用更长的pivot.
我想用3列创建tibble
- 第1列-名称-alpha-包含
a
和b
- 第2列-名称-β-包含
X
和Y
- 第3列-名称-P-包含值
library(tidyverse)
tbl <- tibble(b_X_P = runif(10),
b_Y_P = runif(10),
a_X_P = runif(10),
a_Y_P = runif(10))
我希望在下面的tibble中使用更长的pivot.
我想用3列创建tibble
a
和b
X
和Y
library(tidyverse)
tbl <- tibble(b_X_P = runif(10),
b_Y_P = runif(10),
a_X_P = runif(10),
a_Y_P = runif(10))
在这里,我们可以只使用names_sep
,因为_
将是分隔符,列名应该在其中拆分.此外,将names_to
指定为3个元素的向量,即alpha
、beta
(作为列名中前缀部分的列名,以及列中值部分的.value
)
library(tidyr)
pivot_longer(tbl, cols = everything(),
names_to = c("alpha", "beta", ".value"), names_sep = "_")
-输出
# A tibble: 40 × 3
alpha beta P
<chr> <chr> <dbl>
1 b X 0.271
2 b Y 0.461
3 a X 0.546
4 a Y 0.344
5 b X 0.234
6 b Y 0.00462
7 a X 0.0157
8 a Y 0.384
9 b X 0.309
10 b Y 0.628
# … with 30 more rows
如果我们需要names_pattern
,那么应该将其包装在()
中以捕捉这些角色
pivot_longer(tbl, cols = everything(),
names_to = c("alpha", "beta", ".value"),
names_pattern = "^([^_]+)_([^_]+)_(.*)")
# A tibble: 40 × 3
alpha beta P
<chr> <chr> <dbl>
1 b X 0.271
2 b Y 0.461
3 a X 0.546
4 a Y 0.344
5 b X 0.234
6 b Y 0.00462
7 a X 0.0157
8 a Y 0.384
9 b X 0.309
10 b Y 0.628
# … with 30 more rows