【问题标题】:kable kableExtra, Cells with hyperlinkskable kableExtra,带有超链接的单元格
【发布时间】:2018-07-08 11:17:19
【问题描述】:

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

表格需要有带有超链接的单元格。虽然我可以将 URL 放在呈现表的列中,但我真的更喜欢使用 another 列作为锚文本,并让包含 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"))

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

几乎是我想要的,但我想隐藏“url”列,而是让“model”列成为“url”列中给出的地址的超链接。在此示例中显示原始 URL 可能没问题,但我的实际 URL 真的很难看,不适合人类阅读。

相反,我想渲染如下内容:

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


写完这个问题后,我发现我可以在用 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 交织在这样一个令人不快的字符三明治中。

【问题讨论】:

    标签: r r-markdown kable kableextra


    【解决方案1】:

    cell_spec 中有一个link 选项可供您使用。见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")) 
    

    【讨论】:

    • 谢谢,不用直接生成html字符串真是一种解脱!
    猜你喜欢
    • 1970-01-01
    • 2017-05-30
    • 1970-01-01
    • 2018-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-20
    相关资源
    最近更新 更多