如何使用 pivot_longer 和 names_pattern 学习分组功能

How do I learn the grouping function with pivot_longer and names_pattern

我正在尝试处理 pivot_longer 中的 names_pattern 参数,但我不确定我是否理解分组功能及其工作原理。我需要旋转以下数据框以匹配下面所需的输出。

df<-structure(list(Weighted_Ideology =0.514, Weighted_Ideology_se = 0.00, Unweighted_Ideology = 0.51, Unweighted_Ideology_se = 0.004), row.names = c(NA, -1L), class = "data.frame")

library(tidyr)
df%>%
pivot_longer(., cols=everything(), names_to=c('Variable',  ".value"), names_pattern="([a-z]+_[a-z]+)_(.*)")

期望的输出

df2<-data.frame(
  Variable=c('Weighted', "Unweighted"),
  Ideology=c(0.54, 0.51),
  se=c(0.005, 0.004)
)

更改 names_pattern 以将列名开头 (^) 以外的非 _ 字符作为一组捕获,后跟 _ 然后捕获其余字符 ((.*))

library(dplyr)
library(tidyr)
df %>%
    pivot_longer(cols = everything(), names_to = c("Variable", ".value"), 
       names_pattern = "^([^_]+)_(.*)")%>%
    rename(se = Ideology_se)

-输出

# A tibble: 2 × 3
  Variable   Ideology    se
  <chr>         <dbl> <dbl>
1 Weighted      0.514 0    
2 Unweighted    0.51  0.004

[a-z]+ 仅表示小写字符,而在列名中,有大写起始字符 (Weighted_Ideology)。当有多个 _ 并且我们想要在特定的 _ 处拆分时,匹配上述解决方案中 _ ([^_]+) 以外的字符可能会更好