使用pivot_longer的.names_to=.value时,能否为生成列名添加前缀?
在pivot_longer中使用
.value时如何内置添加列名前缀? 目前pivot_longer并没有专门的内置参数直接为.value生成的列名添加前缀,但可以通过names_glue参数结合正则捕获实现这个需求,不需要后续调用rename_with。
具体实现方法
利用names_glue对.value对应的捕获组进行字符串拼接,直接生成带前缀的列名:
library(tidyverse) 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+)', names_glue = c(coord_type = "{1}", .value = "coord_{2}"))
执行后会直接生成coord_type、coord_1、coord_2三列,其中coord_1和coord_2就是带前缀的目标列。
补充说明
你原本使用rename_with的方法是完全可行的,但通过names_glue可以在透视一步中完成列名修改,流程更简洁。names_glue的作用是将names_pattern捕获的各组内容,按照指定格式拼接成names_to中对应元素的取值——对于.value来说,这个取值就是最终生成的列名,因此可以在这里直接添加前缀。
内容的提问来源于stack exchange,提问作者Victor Yuan
相关产品推荐
相关产品推荐

