我一直在尝试使用以下代码将单独的列转换为长格式:
mtcars %>%
pivot_longer(1:3, values_to = 'values') %>%
pivot_longer(6:7, values_to = 'values1')
但是,我收到以下错误
**Error in `pivot_longer()`:
! Names must be unique.
x These names are duplicated:
* "name" at locations 7 and 9.
i Use argument `names_repair` to specify repair strategy.
Run `rlang::last_trace()` to see where the error occurred.**
任何人都可以知道如何避免此错误以及如何将不同的列块单独转换为长格式,可能在同一个
pivot_longer
调用中?
谢谢
通过查看文档和代码的第一部分可以看到答案。
这些是
pivot_longer()
的参数,以及它们的默认参数(如果有):
pivot_longer(
data,
cols,
...,
cols_vary = "fastest",
names_to = "name", <--- important part
names_prefix = NULL,
names_sep = NULL,
names_pattern = NULL,
names_ptypes = NULL,
names_transform = NULL,
names_repair = "check_unique",
values_to = "value",
values_drop_na = FALSE,
values_ptypes = NULL,
values_transform = NULL
)
如您所见,如果您没有为名称列指定名称(使用
names_to
参数),则默认名称为“name”。
运行
mtcars %>% pivot_longer(1:3, values_to = 'values')
,我们得到输出:
# A tibble: 96 × 10
hp drat wt qsec vs am gear carb name values
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <chr> <dbl>
1 110 3.9 2.62 16.5 0 1 4 4 mpg 21
2 110 3.9 2.62 16.5 0 1 4 4 cyl 6
3 110 3.9 2.62 16.5 0 1 4 4 disp 160
4 110 3.9 2.88 17.0 0 1 4 4 mpg 21
5 110 3.9 2.88 17.0 0 1 4 4 cyl 6
6 110 3.9 2.88 17.0 0 1 4 4 disp 160
7 93 3.85 2.32 18.6 1 1 4 1 mpg 22.8
8 93 3.85 2.32 18.6 1 1 4 1 cyl 4
9 93 3.85 2.32 18.6 1 1 4 1 disp 108
10 110 3.08 3.22 19.4 1 0 3 1 mpg 21.4
# ℹ 86 more rows
注意到最后的“名称”栏了吗?当我们尝试在此之后运行
pivot_longer(6:7, values_to = 'values1')
时,我们试图再次创建一个“名称”列,但我们已经有了一个,所以 dplyr 吓坏了并抛出此错误。
我们可以做一些事情:
names_to = "name1"
,对第二个列使用 names_to = "name2"
)默认情况下,如果列重复,“check_unique”就会出错。使用“最小”允许输出中存在重复项,或使用“唯一”通过添加数字后缀来消除重复。请参阅 vctrs::vec_as_names() 了解更多选项。
names_to = NULL
删除名称列