【问题标题】:How to embed escape characters ("\n", "\t") into dataframe?如何将转义字符(“\n”、“\t”)嵌入数据帧?
【发布时间】:2022-01-05 03:30:03
【问题描述】:

如何在数据框中插入转义字符?

这对于将文本数据格式化成表格包很有用。

我们可以为每个表包使用一个通用解决方案(我希望)。

但是现在我们应该针对每种情况采用很多方法(取决于库和输出格式:pdf、html)。

真的很不舒服!

例如,我们有下一个数据

df <- data.frame("names" = c("a long long long long long ... pretty long name of the our story","Here is also long, but a little shorter"))

我们看到正常输出

                                                             names
1 a long long long long long ... pretty long name of the our story
2                          Here is also long, but a little shorter

但是我们如何才能实现这个输出(“\n”)?

                                                             names
1                                       a long long long long long 
                             ... pretty long name of the our story
2                          Here is also long, but a little shorter

我答应添加一个简单的例子:

编织成 HTML,在 PDF 中不起作用

```{r warning = FALSE, echo = FALSE, message=FALSE, include=FALSE,}
library(flextable)
library(gt)

#data
df <- data.frame("names" = c("a long long long \n long long ... <br> pretty long name of the our story","Here is also long, but a little shorter"))
#table one
table3 <- flextable(df)
table3 <- set_table_properties(table3, layout = "autofit", width = .5)
table3

#table two
table4 <- gt(df) %>% fmt_markdown(columns = everything())
table4
```

<center>
<caption>Table in flextable </caption>
</center>
`r table3`

<center>
<caption>Table in gt </caption>
</center>
`r table4`

在第一种情况下 - 工作\n,在第二种情况下 - /br/ 只有两个包!

【问题讨论】:

  • 听起来你想要stringr::str_wrap()这样的东西。
  • @RitchieSacramento 很有趣。我现在尝试用str_wrap 来完成我的任务。之后返回。但问题仍然存在。在没有任何花里胡哨的情况下嵌入转义会很酷。
  • @RitchieSacramento 不,不能做出想要的输出(
  • 您可以在单元格值的所需位置将换行符包含为“\n”,然后使用huxtable 包打印它:huxtable::as_huxtable(df) 这样打印out 将是一个表格,其中“\n”被转换为实际的换行符......不确定这是否是你要找的
  • @manro 你到底想达到什么目的......可能你正在寻找在降价中打印一个表格,其中换行符是这样显示的?如果是这样, kableExtra 可能是一个选项,如 here 所解释的

标签: r dataframe r-markdown escaping


【解决方案1】:

不要在文本中添加任何换行符!!这是完全没有必要的。您所需要的只是巧妙地使用kableExtra 包。注意下面的代码是来自 RMarkdown 的内容。 使用它创建的文档可以在here找到。

## RMarkdown Start## RMarkdown End 的所有内容添加到 RMarkdown 当然,别忘了去掉代码块前的注释字符(#```)!!

## RMarkdown Start
---
title: "LongText"
author: "Marek Fiołka"
date: "30 11 2021"
output:
  html_document: default
  pdf_document: default
---

#```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE)
#```

Prepare data frame with long text

#```{r echo=TRUE, message=FALSE, warning=FALSE}
library(stringi)
library(tidyverse)
library(kableExtra)

n=50
df = tibble(
  id = 1:n,
  txt = stri_rand_lipsum(n)
)
#```

See the data frame in a typical display

#```{r}
print(df)
#```

View data frame formatted with Kable Extra for HTML

#```{r}
df %>% kbl() %>%
  kable_styling()
#```

View data frame formatted with Kable Extra for PDF

#```{r}
df %>% kbl() %>%
  kable_paper(full_width = F) %>%
  column_spec(1, bold = T, border_right = T) %>%
  column_spec(2, width = "30em")

## RMarkdown End

这样您不仅可以创建 html 文档,还可以创建相应的 pdf 文档。以下是以这种格式创建的文档片段。请注意,在这种情况下,您必须使用 kable_papercolumn_spec 而不是 kable_styling

希望这就是您想要的。

更新

## RMarkdown Start
---
title: "LongText"
author: "Marek Fiołka"
date: "30 11 2021"
output:
  pdf_document: default
  html_document: default
---

#```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE)
#```

Prepare data frame with long text

#```{r echo=TRUE, message=FALSE, warning=FALSE}
library(stringi)
library(tidyverse)
library(kableExtra)

n=10
df = tibble(
  id = 1:n,
  txt = stri_rand_lipsum(n)
)
#```

See the data frame in a typical display

#```{r echo=TRUE}
print(df)
#```

View data frame formatted with [kableExtra](http://haozhu233.github.io/kableExtra/) for HTML

#```{r}
df %>% kbl() %>%
  kable_styling()
#```

View data frame formatted with [kableExtra](http://haozhu233.github.io/kableExtra/) for PDF

#```{r}
df %>% kbl() %>%
  kable_paper(full_width = F) %>%
  column_spec(1, bold = T, border_right = T) %>%
  column_spec(2, width = "30em")

#```

View data frame formatted with [gt](https://gt.rstudio.com/index.html) (only for HTML)

#```{r}
library(gt)
df %>% gt %>% 
  fmt_markdown(columns = everything()) %>%
    tab_options(table.width = px(400))
#```

View data frame formatted with [flextable](https://davidgohel.github.io/flextable/articles/overview.html) HTML & PDF

#```{r message=FALSE, warning=FALSE}
library(flextable)

df %>% flextable %>% width(2, width = 6, unit = "in")
#```

View data frame formatted with [huxtable](https://hughjonesd.github.io/huxtable/) HTML & PDF

#```{r message=FALSE, warning=FALSE}
library(huxtable)

df %>% as_hux %>% 
  set_width(1) %>% 
  set_right_border(everywhere, 1, brdr(3, "double", "grey"))
#```
## RMarkdown End

【讨论】:

  • 谢谢,马雷克先生。你可以尝试为其他一些表格包制作这个技巧吗? (编织为 PDF)gt or flextable? 正如我在问题中所说,有时我们需要使用不同的工具来为我们的任务提供它们的功能。赏金已为您准备好;)
  • 给你。现在你有四种不同的方式。我还在我的 RPubs 上更新了report
  • 酷,您的解决方案看起来像通用解决方案?
  • 不知道我的方案能不能叫通用。它似乎以大多数可能的方式解决了您的问题。我建议熟悉一个库(我推荐 kable Extra 或 kableExtraflextable )并微调最适合您的表格视图。
  • 我现在没有任何任务,只是为以后的事做准备。 Dzięki, panu Marek ;) 我会在最后一天给你加个赏金,以更好地影响帖子;)
猜你喜欢
  • 2016-04-11
  • 1970-01-01
  • 1970-01-01
  • 2020-11-23
  • 1970-01-01
  • 2021-12-10
  • 1970-01-01
  • 2011-03-18
  • 1970-01-01
相关资源
最近更新 更多