【问题标题】:How to print and combine text that is stored in a dataframe?如何打印和组合存储在数据框中的文本?
【发布时间】:2018-04-04 08:58:40
【问题描述】:

我有一个如下的数据框:

library(dplyr)
mydf <- data_frame(headline = c('this is the first news',
                                'this is the second news'),
                   fulltext = c('Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum',
                                'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum'))

本质上,我想为每篇文章创建一个文档(pdfhtml,等等),打印headline,后跟fulltext 列中的前100 个字符。

类似

--html/pdf 输出的开始

这是第一条新闻

Lorem ipsum dolor sit amet,consectetur adipiscing elit,sed do eiusmod tempor incididunt ut labore et dolore magna aliqua。 Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat。 Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur。 Exceptioneur sint occaecat cupidatat non proident

这是第二条新闻

Lorem ipsum dolor sit amet,consectetur adipiscing elit,sed do eiusmod tempor incididunt ut labore et dolore magna aliqua。 Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat。 Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur。 Exceptioneur sint occaecat cupidatat non proident

--html/pdf 输出结束

如何使用knitr 做到这一点?

【问题讨论】:

标签: r knitr


【解决方案1】:

这可以通过 for 循环、cat 和块选项 results = 'asis' 的组合来完成

---
title: "Untitled"
output: html_document
---

```{r, include = FALSE}
library(dplyr)
mydf <- data_frame(headline = c('this is the first news',
                                'this is the second news'),
                   fulltext = c('Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum',
                                'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum'))
```

```{r, echo = FALSE, results = 'asis'}
for (i in seq_len(nrow(mydf))){
  cat(paste0("**", mydf[["headline"]][i], "**"))
  cat("\n\n")
  cat(
    paste0(
      gsub("\\n", "\n\n", substr(mydf[["fulltext"]][i], 1, 100), "...")
    )
  )
  cat("\n\n")
}
```

【讨论】:

  • 非常好!但是这个解决方案似乎没有考虑到全文中包含的任何可能的\n。你在这里看到一些简单的解决方法吗?谢谢!
  • 您想对fulltext 中的\n 做什么?应该创建一个新段落,还是被忽略?
  • 理想情况下,新段落。遵守全文中写的内容:D
  • 编辑了答案:它很粗糙,但它用\n\n 替换了\n 的任何实例(您需要两个换行符才能在markdown 中创建一个新段落。如果这会在降价,它应该被忽略为不必要的空格)。
【解决方案2】:

出于某种原因您真的想使用 knitr 吗?这样做很糟糕:

for(i in 1:nrow(mydf)){
  temp=(paste(mydf[i,1],'<br>','\n',mydf[i,2]))
  write.table(temp,paste(i,'.txt'), row.names = F,col.names = F)
  knit(paste(i,'.txt'),paste(i,'.html'))
}

【讨论】:

  • 不一定是knitr。任何输出这个的好方法都会很好。文本可以包含诸如 \n 换行符之类的字符
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-27
  • 2021-07-15
  • 1970-01-01
  • 2017-09-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多