kable kableExtra,带有超链接的单元格
kable kableExtra, Cells with hyperlinks
我正在尝试在 rmarkdown 文档中创建一个 table 并以 HTML 输出为目标,使用非常受欢迎且非常棒的 kable 和 kableExtra 工具。
table 需要有带超链接的单元格。虽然我可以将 URL 放在呈现的 table 的列中,但我真的更愿意使用 另一个 列作为锚文本并让包含 URL 的列完全不可见。
例如,让我们创建一个带有超链接的 kable table...
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 交错放在这样一个令人倒胃口的字符三明治中。
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"))
我正在尝试在 rmarkdown 文档中创建一个 table 并以 HTML 输出为目标,使用非常受欢迎且非常棒的 kable 和 kableExtra 工具。
table 需要有带超链接的单元格。虽然我可以将 URL 放在呈现的 table 的列中,但我真的更愿意使用 另一个 列作为锚文本并让包含 URL 的列完全不可见。
例如,让我们创建一个带有超链接的 kable table...
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 交错放在这样一个令人倒胃口的字符三明治中。
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"))