我有一个简单的数据结构:案例是国家/地区,对于每个国家/地区,我都有几个数字变量。像这样:
dat <- data.frame(country = c("Belgium", "Germany", "Holland", "Ireland"), Var1 = 1:4, Var2 = 11:14)
print(dat, row.names = FALSE)
country Var1 Var2
Belgium 1 11
Germany 2 12
Holland 3 13
Ireland 4 14
该表仍需格式化,标题以粗体显示,行以灰色或白色交替显示。
现在,我要在“国家”和“Var1”之间添加两列。新的第一列称为“标志”,其中应包含该国家的标志。第二个新列称为“已标记”,其中包含一个红色标记的图像,即该国家在特定人权问题上的得分很差;如果橙色标记得分为中等,则显示橙色标记,否则则没有。
如何创建在R中以这种方式打印的对象?如何在这样的布局中将图像与数据结合起来?
(最终,这将是使用
knitr
创建的更大文档的一部分)
最佳答案
如果您将和rmarkdown package一起使用 knitr ,这非常简单-只需使用Markdown语法![]()
即可包含图像,例如---
title: "Flags"
author: "Yihui Xie"
date: "2014/08/03"
output: html_document
---
```{r results='asis'}
dat <- data.frame(
country = c('Canada', 'United Kindom'),
abbr = c('ca', 'gb'),
var1 = c(1, 2),
var2 = rnorm(2)
)
dat$flag <- sprintf('![](http://flagpedia.net/data/flags/mini/%s.png)', dat$abbr)
library(knitr)
kable(dat)
```
如果需要LaTeX/PDF输出,则必须自己下载这些图像。这是一个例子:---
title: "Flags"
author: "Yihui Xie"
date: "2014/08/03"
output: html_document
---
```{r}
dat <- data.frame(
country = c('Canada', 'United Kindom'),
abbr = c('ca', 'gb'),
var1 = c(1, 2),
var2 = rnorm(2)
)
dat$file <- paste0(dat$abbr, '.png')
dat$link <- paste0('http://flagpedia.net/data/flags/mini/', dat$file)
dat$flag <- sprintf('![](%s)', dat$file)
for (i in seq_len(nrow(dat))) {
if (!file.exists(dat$file[i])) xfun::download_file(dat$link[i])
}
knitr::kable(dat[, -c(5, 6)])
```
关于r - 将图像添加到R中的表格状输出中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25106481/