ℕʘʘḆḽḘ
ℕʘʘḆḽḘ

Reputation: 19375

How to print and combine text that is stored in a dataframe?

I have a dataframe like follows:

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'))

essentially, I would like to create a document (pdf, html, whatever) that for each article, prints the headline followed by the 100 first characters from the fulltext column.

Something like

-- start of html/pdf output

this is the first news

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

this is the second news

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

-- end of html/pdf output

How can I do that with knitr?

Upvotes: 4

Views: 126

Answers (2)

Benjamin
Benjamin

Reputation: 17279

This can be done with a combination of a for loop, cat, and the chunk option 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")
}
```

Upvotes: 4

brunoroquette
brunoroquette

Reputation: 76

You really want to use the knitr for some reason? A poor way to do this:

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'))
}

Upvotes: 2

Related Questions