从“pivot_longer”输出中删除自动生成的前缀

Remove auto-generated prefixes from `pivot_longer` output

如何删除 table 中的 (Intercept)_(carat)_ 前缀?这样,我可以稍微缩小 table 的宽度并删除名称冗余。

pivot_longer()pivot_wider() 或两者中使用 names_prefix = "",类似于 没有帮助。

生成 table 的代码是

library(emmeans)
library(tidyverse)
library(broom)
library(kableExtra)


models_ci <- diamonds %>% group_by(cut, color) %>% 
           do(data.frame(tidy(lm(price ~ carat, data = .), conf.int=T )))

models_ci[,1:5] %>% 
  pivot_longer(cols=c(estimate, std.error), names_prefix = "") %>% 
 pivot_wider(names_from = c(term, name), 
             values_from = value) %>%
  kbl(booktabs = T,
          linesep = "",
          digits = 2,
    caption = "95% confidence intervals") %>%
  add_header_above(c("Effects" = 2 , "Intercept" = 2, "Slope" = 2)) %>% 
  kable_styling(latex_options = c("repeat_header"))

提前致谢!

一个解决方案colnames<-

library(tidyverse)
library(broom)
library(kableExtra)


models_ci <- diamonds %>% group_by(cut, color) %>% 
  do(data.frame(tidy(lm(price ~ carat, data = .), conf.int=T )))

models_ci[,1:5] %>% 
  pivot_longer(cols=c(estimate, std.error)) %>% 
  pivot_wider(names_from = c(term, name), 
              values_from = value) %>%
  `colnames<-`(c("cut", "color", "estimate", "std.error", "estimate", "std.error")) %>%
  kbl(booktabs = T,
      linesep = "",
      digits = 2,
      caption = "95% confidence intervals") %>%
  add_header_above(c("Effects" = 2 , "Intercept" = 2, "Slope" = 2)) %>% 
  kable_styling(latex_options = c("repeat_header"))

-输出

您可以将 setNamesgsub

一起使用

setNames(gsub('\(Intercept)_', "", colnames(.)))

setNames(gsub('\carat_', "", colnames(.)))

library(emmeans)
library(tidyverse)
library(broom)
library(kableExtra)

models_ci <- diamonds %>% group_by(cut, color) %>% 
  do(data.frame(tidy(lm(price ~ carat, data = .), conf.int=T )))

models_ci[,1:5] %>% 
  pivot_longer(cols=c(estimate, std.error), names_prefix = "") %>% 
  pivot_wider(names_from = c(term, name), 
              values_from = value) %>%
  setNames(gsub('\(Intercept)_', "", colnames(.))) %>% 
  setNames(gsub('\carat_', "", colnames(.))) %>% 
  kbl(booktabs = T,
      linesep = "",
      digits = 2,
      caption = "95% confidence intervals") %>%
  add_header_above(c("Effects" = 2 , "Intercept" = 2, "Slope" = 2)) %>% 
  kable_styling(latex_options = c("repeat_header"))