kable kableExtra,具有超链接的单元格

时间:2018-01-29 17:22:55

标签: r r-markdown kable kableextra

我正在尝试使用备受赞赏且非常棒的kable和kableExtra工具在rmarkdown文档中创建一个表并定位HTML输出。

该表需要包含超链接的单元格。虽然我可以将URL放在渲染表的一列中,但我更倾向于使用另一个列作为锚文本,并使包含URL的列成为完全看不见。

例如,让我们创建一个带有超链接的kable表......

dt      <- mtcars[c(15,16,19,31),1:3] %>% mutate(model=row.names(.))
dt$url  <- c("https://en.wikipedia.org/wiki/Cadillac_Fleetwood",
             "https://www.lincoln.com/luxury-cars/continental/",
             "http://shop.honda.com/civics.aspx",
             "https://bringatrailer.com/2011/12/28/striking-1973-maserati-bora-4-9/")

在kable中渲染它的最原始的方法是:

kable(dt, format = "html") %>%
    kable_styling(bootstrap_options = c("hover", "condensed"))

这会产生如下所示的输出:

table with URL's

这几乎我想要的东西,但我想隐藏&#34; url&#34;列而是拥有&#34;模型&#34;列是指向&#34; url&#34;中给出的地址的超链接柱。在这个示例中显示原始网址可能没问题,但我的实际网址真的很难看,不适合人类阅读。

相反,我想渲染这样的东西: Table with proper hyperlinks

我想这里有两个问题。一个是如何禁止渲染列,另一个是如何使用列数据在单元格中正确创建超链接。

在写完这个问题之后,我想在使用kable渲染之前简单地为超链接单元格编写原始HTML。关键是在调用kable()时设置escape = FALSE。

换句话说,我可以这样做......

dt      <- mtcars[c(15,16,19,31),1:3] %>% mutate(model=row.names(.))
dt$url <- c("https://en.wikipedia.org/wiki/Cadillac_Fleetwood",
             "https://www.lincoln.com/luxury-cars/continental/",
             "http://shop.honda.com/civics.aspx",
             "https://bringatrailer.com/2011/12/28/striking-1973-maserati-bora-4-9/")

dt <- dt %>% mutate(model=paste("<a href=\"",url,"\">",model,"</a>",sep="")) %>% 
select (mpg,cyl,disp,model)

kable(dt, format = "html", escape = FALSE) %>%
      kable_styling(bootstrap_options = c("hover", "condensed")) 

这样做,但我宁愿不将R和HTML交错放在这样一个令人不快的角色三明治中。

1 个答案:

答案 0 :(得分:5)

您可以使用link中的cell_spec选项。见https://cran.r-project.org/web/packages/kableExtra/vignettes/awesome_table_in_html.html#links

library(dplyr)
library(knitr)
library(kableExtra)
dt_url <- c("https://en.wikipedia.org/wiki/Cadillac_Fleetwood",
            "https://www.lincoln.com/luxury-cars/continental/",
            "http://shop.honda.com/civics.aspx",
            "https://bringatrailer.com/2011/12/28/striking-1973-maserati-bora-4-9/")

mtcars[c(15,16,19,31),1:3] %>% 
  mutate(model = cell_spec(row.names(.), "html", link = dt_url)) %>%
  kable("html", escape = FALSE) %>%
  kable_styling(bootstrap_options = c("hover", "condensed"))