向pivot_longger names_to .value生成的列名添加前缀

5jvtdoz2  于 2022-12-05  发布在  其他
关注(0)|答案(1)|浏览(94)

是否可以为使用pivot_longer中参数names_to.value选项生成的列名添加前缀?
示例:

df <- tibble(x1 = 0.1, x2 = 0.2, y1 = 0.05, y2 = 0.15)
df %>%
  pivot_longer(cols = everything(),
               names_to = c('coord_type', '.value'),
               names_pattern = '(\\D+)(\\d+)')

# A tibble: 2 × 3
  coord_type   `1`   `2`
  <chr>      <dbl> <dbl>
1 x           0.1   0.2 
2 y           0.05  0.15

我希望12列的前面有前缀“coord_”。当然,我可以简单地在pivot_longger之后重命名它们,如下所示:

df %>%
  pivot_longer(cols = everything(),
               names_to = c('coord_type', '.value'),
               names_pattern = '(\\D+)(\\d+)') %>%
  rename_with(.fn = ~glue("coord_{.x}"), matches("[12]"))

# A tibble: 2 × 3
  coord_type coord_1 coord_2
  <chr>        <dbl>   <dbl>
1 x             0.1     0.2 
2 y             0.05    0.15

但我很感兴趣的是,如果pivot_longer有一些选择,这样做简洁。

kyvafyod

kyvafyod1#

我们可以使用names_repair,它可以接受函数

library(stringr)
library(tidyr)
pivot_longer(df, cols = everything(),
               names_to = c('coord_type', '.value'),
               names_pattern = '(\\D+)(\\d+)', 
       names_repair = ~ str_replace(.x, "^(\\d+)", "coord_\\1"))
  • 输出
# A tibble: 2 × 3
  coord_type coord_1 coord_2
  <chr>        <dbl>   <dbl>
1 x             0.1     0.2 
2 y             0.05    0.15

相关问题