使用 KableExtra 为列标题创建函数

Creating function for Column Headers using KableExtra

提问人:Benjamin Telkamp 提问时间:9/30/2023 更新时间:9/30/2023 访问量:40

问:

我正在尝试创建一个向量,我可以将其从 KableExtra 传递给 add_header_above() 函数,用于列上方带有标题的频率表。

最终,我的向量应该看起来像这样:

c(" ", "I1" = 2, "SI2" = 2, "SI1" = 2, "VS2" = 2, "VS1" = 2, "VVS2" = 2, "VVS1" = 2, "IF" = 2, "Total" = 2)

我做错了什么?我希望每个标题都扩展到两列(第一个空标题除外),但是当我通过时,每次只需要一列

my.header.above(indep.var = diamonds$cut, dep.var = diamonds$clarity)

相反,“= 2”被添加到标签旁边的列标题中;'I1 =' 2 ”。add_header_above()clarity


my.header.above <- function(indep.var, dep.var) {
  
  myTable = addmargins(table(indep.var,
                             dep.var))
  colnames(myTable)[dim(myTable)[2]] <- "Total"
  
  Header.above <- character(dim(myTable)[2]) 
  
  for (j in 1:dim(myTable)[2]) {
    
    Header.above[j+1] <- paste0('"',colnames(myTable)[j], '"',' = ', 2)

  }
  
  return(Header.above)
  
}

my.header.above(indep.var = diamonds$cut,
                dep.var = diamonds$clarity)

R LaTeX R-Markdown Kable 列头

评论


答:

1赞 TarJae 9/30/2023 #1

一种可能的解决方案是将标题作为连接列表的命名元素传递,此处的名称是标题,元素是列范围。

我们可以直接分配名称,例如: ,或者我们可以使用: :names(Header.above) <- colnames(myTable)setNamesHeader.above <- setNames(numeric(dim(myTable)[2]) + 2, colnames(myTable))

library(ggplot2) # diamonds dataset
my.header.above <- function(indep.var, dep.var) {
  
  myTable = addmargins(table(indep.var, dep.var))
  colnames(myTable)[dim(myTable)[2]] <- "Total"
  
  Header.above <- numeric(dim(myTable)[2]) + 2
  names(Header.above) <- colnames(myTable)
  #  Header.above <- setNames(numeric(dim(myTable)[2]) + 2, colnames(myTable))
  
  Header.above = c(" " = 1, Header.above)
  
  return(Header.above)
}

my.header.above(indep.var = diamonds$cut, dep.var = diamonds$clarity)

         I1   SI2   SI1   VS2   VS1  VVS2  VVS1    IF Total 
    1     2     2     2     2     2     2     2     2     2

评论

0赞 Benjamin Telkamp 10/1/2023
高超!这是否意味着 add_header_above() 接受不同的格式,或者您是否创建了我需要的完全相同的向量(我使用了您的第一个选项)?