我有一个功能,这是创建一个横幅列表逐个表.但现在我想将它们显示为作为cind的绑定.

我能够通过列绑定表格,但不能使横幅作为表格的标题.此外,我还想删除像N.X,N.Y这样的名字.我只想保持N,我需要一个灵活的输出

currently table is coming like below enter image description here

library(knitr)
library(tidyverse)
library(flextable)

banner <- c("All","Other")
t1 <- structure(list(` ` = c("CA", "USA","UK", "GER", "Italy","France", "China"),
                                               Local = c("38%", "58%","71%", "78%", "91%", "91%", "84%"),
                                               Outsider = c("43%", "28%", "29%"," 9%", " 7%", " 4%", " 5%"), 
                                               Mixed = c("19%","13%", " 0%", "13%", " 1%", " 5%", "11%"),
                                               N = c("9999", "9999","9999", "9999", "9999", "9999", "9999")), row.names = c(NA, -7L), class = "data.frame")

t2 <- structure(list(` ` = c("CA", "USA","UK", "GER", "Italy","France", "China"),
                     Local = c("71%", "93%","96%", "96%", "96%", "96%", NA),
                     Outsider = c(" 7%", " 4%", " 4%"," 0%", " 0%", " 0%", NA),
                     Mixed = c("21%"," 4%", " 0%", " 4%", " 4%", " 4%", NA),
                     N = c("2800", "2800","2800", "2800", "2800", "2800", NA)), row.names = c(NA, -7L), class = "data.frame")
tl <- list(t1,t2)


fun1 <- function(tl,banner){
  t_list1<-list()
  for (i in 1:length(banner)) 
  {
    t_list <- list()
    t_list1[[i]] <- tl[[i]]
  }
  t1<-Reduce(function(...)merge(...,all=TRUE,by=" "),t_list1)
  
  t1 <- t1 %>% flextable()
  t1
}

fun1(tl=tl,banner = banner)

输出应如下所示

enter image description here

推荐答案

要解决这两个问题,一种方法是首先重命名子列表的列名,然后添加banner作为前缀.此外,在此步骤中,我会将您的列表转换为数据帧.这样做之后,您的列名是唯一的,并且在使用merge时不会添加.x.y.第二个好处是,我们现在可以利用separate_header()来拆分列名,以实现您想要的最终结果:

library(flextable)

tl <- list(t1, t2)
names(tl) <- banner

tl <- Map(
  function(x, y) {
    names(x)[-1] <- paste(y, names(x)[-1], sep = "_")
    data.frame(x, check.names = FALSE)
  },
  tl, names(tl)
)

fun1 <- function(tl) {
  t1 <- Reduce(function(...) merge(..., all = TRUE, by = " "), tl)

  t1 |> 
    flextable() |> 
    separate_header()
}

fun1(tl = tl)

当然,你能把Map移到你的函数里来重命名吗?

library(flextable)

tl <- list(t1, t2)

fun1 <- function(tl, banner) {
  tl <- Map(
    function(x, y) {
      names(x)[-1] <- paste(y, names(x)[-1], sep = "_")
      data.frame(x, check.names = FALSE)
    },
    tl, banner
  )
  
  t1 <- Reduce(function(...) merge(..., all = TRUE, by = " "), tl)

  t1 |> 
    flextable() |> 
    separate_header()
}

fun1(tl = tl, banner = banner)

enter image description here

R相关问答推荐

使用geom_rect的带有事件注释的时间序列图

r带有参考年的两年移动平均线

根据列中的数字移动单元格位置

分组时间连续值

使用facet_wrap()时如何将面板标题转换为脚注?

使用格式化程序自定义hc_tooltip以添加textColor删除了我的标记并try 将它们带回失败

如果窗口在CLARME或集团之外,则有条件领先/滞后滚动总和返回NA

基于现有类创建类的打印方法(即,打印tibles更长时间)

然后根据不同的列值有条件地执行函数

bslib::card_header中的shine::downloadButton,图标而不是文本

在连续尺度上转置标签[瀑布图,R]

在R中无法读入具有Readxl和lApply的数据集

从BRM预测价值

方法::slotName如何处理非类、非字符的参数?

正在导出默认的RStudio主题,还是设置括号 colored颜色 ?

在gggraph中显示来自不同数据帧的单个值

在R中,如何从一系列具有索引名的变量快速创建数据帧?

使用gt_summary是否有一种方法来限制每个变量集进行配对比较?

如何根据未知数的多列排除重复行

访问数据帧中未定义的列时出现R错误