用垂直线分隔列并在 Xtable (R Markdown) 中添加脚注

Seperating columns with a vertical line and adding a footnote in an Xtable (RMarkdown)

我想知道是否有人知道如何在 Xtable 下方添加脚注,以及如何用垂直线分隔每列以使 table 看起来更整洁。

我希望我的脚注说 "these are ADF test results"

我在下面复制了我的代码和数据框

{r table_3, echo = FALSE, warning = FALSE, message = FALSE, results = 'asis'}
library(tidyverse)
library(tidyselect)
library(xtable)
library(readxl)
library(knitr)

# Create Dataframe


variables <- c("Argentina Bond Flows", "Argentina Equity Flows", "Chile Bond Flows", "Chile Equity Flows", "Mexico Bond Flows",
               "Mexico Equity Flows", "Indonesia Bond Flows", "Indonesia Equity Flows", "Korea Bond Flows", "Korea Equity Flows",
               "Philippines Bond Flows", "Philippines Equity Flows", "Thailand Bond Flows", "Thailand Equity Flows", 
               "South Africa Bond Flows", "South Africa Equity Flows","United States S&P 500", "United States M1")


adf <- c("-4.3557","-6.4865","-3.4893","-3.3485","-2.6294","-5.511","-2.9238","-6.0305","-9.7081","-2.0444","-4.7619","-5.6108","-4.6314","-4.6218","-4.3337","-3.7213","2.6471"," 4.0174")
pp <- c("-6.9685","-9.3864","-6.7449","-5.6533","-6.0265","-9.4065","-6.531","-7.5043","-21.0764","-3.5716","-8.3505","-6.5574 ","-10.3266","-7.445","-8.9639","-6.3464","-11.1298","4.0512")

variables2 <- c("Argentina M1", "Argentina Equity Index", "Chile M1", "Chile Equity Index", "Mexico M1",
                "Mexico Equity Index", "Indonesia M1", "Indonesia Equity Index", "Korea M1", "Korea Equity Index",
                "Philippines M1", "Philippines Equity Index", "Thailand M1", "Thailand Equity Index", 
                "South Africa M1", "South Africa Equity Index","", "")


adf2 <- c("-6.9593","6.1785","3.6245","-2.2697","3.2417","2.4172","2.4237","2.0484","3.8211","-6.938","-6.9593","-7.7315","-6.9593","6.1785","-8.0415 ","2.5385","","")
pp2 <- c("-13.7725","4.8728","-11.0177","-9.3776","-14.3688 ","-2.2334","-13.1095","-8.8171","-11.1806","-9.8397","-13.7725","-9.4015","-2.6801","-11.8756","-10.681"," -9.6241","","")


unit_table <- data.frame(variables, adf, pp,variables2, adf2,pp2)
colnames(unit_table) <- c("Country Variable", "ADF", "PP","Country Variable", "ADF", "PP")

# Create a table using XTable

table <- xtable(unit_table, caption = "Unit Root Test Results \label{Table3}",
                # tabular.environment = "longtable",
                floating = TRUE,
                table.placement = 'H',
                include.rownames = FALSE,
                # scalebox = 0.3,
                comment = FALSE,
                caption.placement = 'top'
                 )
bold <- function(x) {paste('{\textbf{',x,'}}', sep ='')}


print(table, include.rownames = FALSE, sanitize.colnames.function=bold, comment = FALSE)

此外,我该如何着手将 table 中的某些词加粗。例如,如果我想加粗 "Korea Bond Flows",我该怎么做呢?

TIA!

我用得不多 xtable 但有一些可能有用的建议。

首先,要添加脚注,您可以包括以下内容:

comment <- list(pos = list(0))
comment$pos[[1]] <- c(nrow(unit_table))
comment$command <- c(paste("\hline\n", 
                           "These are ADF test results.\n", 
                           sep = ""))

然后当您 print table 时,添加 add.to.row = comment, hline.after = c(-1, 0)。有关这方面的更多详细信息,请参阅类似的 question.

要用垂直线分隔列,请使用 align 并提供对齐方式(例如左对齐或右对齐)以及您希望分隔的位置。例如,当您调用 xtable 函数时添加选项 align = "ll|l|l|l|l|l"

为 table 中的 粗体 特定单元格,为那些 table 元素添加代码,例如 Korea Bond Flows 的粗体:

unit_table[9, "Country Variable"] <- paste0("BOLD", unit_table[9, "Country Variable"])

并使用一个函数来检测这个粗体代码:

bold.function <- function(x) gsub('BOLD(.*)', paste('\\textbf{\1','}'),x)

然后将 sanitize.text.function = bold.function 添加到 xtableprint

这是似乎有效的整个 RMarkdown。值得注意的是,我在 United States S&P 500 中转义了你的 & 并在创建数据框时添加了 stringsAsFactors = FALSE

---
title: "Test"
output: pdf_document
classoption: landscape
---

```{r, results="asis", echo = FALSE}

library(xtable)

variables <- c("Argentina Bond Flows", "Argentina Equity Flows", "Chile Bond Flows", "Chile Equity Flows", "Mexico Bond Flows",
               "Mexico Equity Flows", "Indonesia Bond Flows", "Indonesia Equity Flows", "Korea Bond Flows", "Korea Equity Flows",
               "Philippines Bond Flows", "Philippines Equity Flows", "Thailand Bond Flows", "Thailand Equity Flows", 
               "South Africa Bond Flows", "South Africa Equity Flows","United States S\&P 500", "United States M1")

adf <- c("-4.3557","-6.4865","-3.4893","-3.3485","-2.6294","-5.511","-2.9238","-6.0305","-9.7081","-2.0444","-4.7619","-5.6108","-4.6314","-4.6218","-4.3337","-3.7213","2.6471"," 4.0174")
pp <- c("-6.9685","-9.3864","-6.7449","-5.6533","-6.0265","-9.4065","-6.531","-7.5043","-21.0764","-3.5716","-8.3505","-6.5574 ","-10.3266","-7.445","-8.9639","-6.3464","-11.1298","4.0512")

variables2 <- c("Argentina M1", "Argentina Equity Index", "Chile M1", "Chile Equity Index", "Mexico M1",
                "Mexico Equity Index", "Indonesia M1", "Indonesia Equity Index", "Korea M1", "Korea Equity Index",
                "Philippines M1", "Philippines Equity Index", "Thailand M1", "Thailand Equity Index", 
                "South Africa M1", "South Africa Equity Index","", "")

adf2 <- c("-6.9593","6.1785","3.6245","-2.2697","3.2417","2.4172","2.4237","2.0484","3.8211","-6.938","-6.9593","-7.7315","-6.9593","6.1785","-8.0415 ","2.5385","","")
pp2 <- c("-13.7725","4.8728","-11.0177","-9.3776","-14.3688 ","-2.2334","-13.1095","-8.8171","-11.1806","-9.8397","-13.7725","-9.4015","-2.6801","-11.8756","-10.681"," -9.6241","","")

unit_table <- data.frame(variables, adf, pp,variables2, adf2,pp2, stringsAsFactors = FALSE)
colnames(unit_table) <- c("Country Variable", "ADF", "PP","Country Variable", "ADF", "PP")

# Create a table using XTable

unit_table[9, "Country Variable"] <- paste0("BOLD", unit_table[9, "Country Variable"])

table <- xtable(unit_table, 
                caption = "Unit Root Test Results \label{Table3}",
                # tabular.environment = "longtable",
                floating = TRUE,
                table.placement = 'H',
                include.rownames = FALSE,
                # scalebox = 0.3,
                comment = FALSE,
                caption.placement = 'top',
                align = "ll|l|l|l|l|l"
)

# Additional code added

bold.function <- function(x) gsub('BOLD(.*)', paste('\\textbf{\1','}'),x)

comment <- list(pos = list(0))
comment$pos[[1]] <- c(nrow(unit_table))
comment$command <- c(paste("\hline\n", 
                           "These are ADF test results.\n", 
                           sep = ""))

print(table, add.to.row = comment, hline.after = c(-1, 0), sanitize.text.function = bold.function)
```