首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >循环遍历数据,而不是在R中索引

循环遍历数据,而不是在R中索引
EN

Stack Overflow用户
提问于 2020-11-14 03:05:42
回答 3查看 69关注 0票数 1

我正在尝试使用Rmarkdown将我的数据转换为html文档,目前我依赖于向量和索引的转换来解决我的问题。

虽然我的样本数据有4个观察值,但我的实际数据集有30多条记录,因此索引似乎很麻烦和不自然。

有没有一种更好的方法来按顺序取出这些元素?任何建议都是很棒的。

代码语言:javascript
复制
 --
title: "Rmarkdown report"
output: html_document
---
    
    
```{r echo = FALSE}

mydata <- data.frame(First = c("John","Hui","Jared"),Second = c("Smith","Chang","Jzu"),Sport = c("Football","Soccer","Ballet"),Age = c("12","13","12"),Smith=c(“微生物可能是居住在月球、火星或太阳系其他地方的未来殖民者的朋友,他们的目标是建立自给自足的家园。太空拓荒者,就像地球上的人一样,将需要被称为稀土元素的东西,这对现代技术至关重要。这17种元素,有令人望而生畏的名字,如Y、in、and和in,在地球外壳中分布稀少。没有稀土,我们就不会有用于手机和电动汽车的某些激光器、金属合金和强大的磁铁。但今天在地球上开采它们是一个艰巨的过程。它需要粉碎成吨的矿石,然后使用化学物质提取这些金属中的微量,这些化学物质会留下有毒废水的河流。

爱丁堡大学天体生物学教授查尔斯·S·科克尔说,“在国际空间站上进行的实验表明,一种潜在的更清洁、更有效的方法可以在其他领域发挥作用:让细菌来做从岩石中分离稀土元素的繁琐工作。这个想法是,生物学本质上是在催化一种反应,如果没有生物学,这种反应会非常缓慢地发生。”

在地球上,这样的生物开采技术已经被用于生产世界上10 %到20 %的铜,在一些金矿也是如此;科学家们已经发现了有助于从岩石中浸出稀土元素的微生物。

爱丁堡大学天体生物学教授查尔斯·S·科克尔说,“在国际空间站上进行的实验表明,一种潜在的更清洁、更有效的方法可以在其他领域发挥作用:让细菌来做从岩石中分离稀土元素的繁琐工作。这个想法是,生物学本质上是在催化一种反应,如果没有生物学,这种反应会非常缓慢地发生。”

在地球上,这种生物开采技术已经被用于生产世界上10 %到20 %的铜,在一些金矿也是如此;科学家们已经发现了有助于从岩石中浸出稀土元素的微生物。

first<- as.vector(mydata$First)

秒<- as.vector(mydata$Second)

年龄<- as.vector(mydata$年龄)

提交<- as.vector(mydata$ submission )

代码语言:javascript
复制
## 

**First:** `r first[1]` &emsp; **Second:**  `r sec[1]` <br>
**Age:** `r age[1]`    


**submission** <br>

`r submission[1]`


***

**First:** `r first[2]` &emsp; **Second:**  `r sec[2]` <br>
**Age:** `r age[2]`    


**submission** <br>

`r submission[2]`
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-11-14 03:28:30

下面是一种迭代所有行的方法

代码语言:javascript
复制
---
title: "Rmarkdown report"
output: html_document
---
    
    
```{r echo = FALSE}

使用上面的数据

mydata <- data.frame(...)

定义模板(使用data.frame中的列名)

模板<- "First:r First Second: template

年龄:r Age

提交

r submission

现在为data.frame的每一行处理模板

src <- lapply(1:nrow(mydata),function(i) {

knitr::knit_child(text=template,envir=mydatai,,quiet=TRUE)

})

代码语言:javascript
复制
# Print result to document
`r knitr::knit_child(text=unlist(src))`

在这里,我们使用knit_child获取模板字符串,然后将其用于data.frame的每一行。我在这里使用了一个技巧,将data.frame的行作为环境传入,这样模板就可以将所有列看作变量,所以我们不需要创建所有data.frame列的矢量版本。

票数 1
EN

Stack Overflow用户

发布于 2020-11-14 03:20:41

如果我们需要在全局环境中创建对象,请将数据列子集到一个list中,重命名它并使用list2env

代码语言:javascript
复制
nm1 <- c('First', 'Second', 'Age', 'submission')
nm2 <- c('first', 'sec', 'age', submission')
list2env(setNames(unclass(mydata[nm1]), nm2), .GlobalEnv)
票数 1
EN

Stack Overflow用户

发布于 2020-11-14 15:55:25

这是我对你上一个问题的回答:

您可以使用cat将HTML代码添加到R标记块中,以便遍历数据。

重要

您必须向{r}添加results = "asis"

下面是循环:

代码语言:javascript
复制
{r results="asis", echo = FALSE}

i = 1

NR_OF_ROWS <-
  nrow(data) # number of rows that the loop will go through

while (i <= NR_OF_ROWS) {
  cat("\n **First:** ", data[i, 1], "&emsp; **Last:** ", data[i, 2], "<br> \n")
  
  
  cat("\n **Age:** ", data[i, 3], "&emsp; **Sport:** ", data[i, 4], "<br> \n")
  
  cat("\n **submission** ", data[i, 5], "<br> \n")
  # cat("\n <br> \n") extra space between entries
  cat("\n *** \n") line between entries
  
  i = i + 1
}

结果如下:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64826644

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档