使用 R 将数据框转换为嵌套的 html 文件

斯巴克

我正在尝试将csv文件(在本例中为 tibble tree)转换为html如下所示的嵌套文件。我做到了表达csv文件 inMarkDown和 using pandoc.

最好的方法是什么R是否有足够的软件包可供使用?是否也可以在 R 中转换html结果插入classspan某些 HTML 元素?

library(tidyverse)

tree <- tibble::tribble(
  ~level1,~level2,~level3,~level4,
  "Beverages","Water","","",
  "Beverages","Coffee","","",
  "Beverages","Tea","Black tea","",
  "Beverages","Tea","White tea","",
  "Beverages","Tea","Green tea","Sencha",
  "Beverages","Tea","Green tea","Gyokuro",
  "Beverages","Tea","Green tea","Matcha",
  "Beverages","Tea","Green tea","Pi Lo Chun"
)
Created on 2021-04-23 by the reprex package (v1.0.0)

这是html我想要获取的嵌套文件。

 <ul>
        <li>
            <p>Beverages</p>
            <ul>
                <li>
                    <p>Water</p>
                </li>
                <li>
                    <p>Coffee</p>
                </li>
                <li>
                    <p>Tea</p>
                    <ul>
                        <li>
                            <p>Black Tea</p>
                        </li>
                        <li>
                            <p>White Tea</p>
                        </li>
                        <li>
                            <p>Green Tea</p>
                            <ul>
                                <li>Sencha</li>
                                <li>Gyokuro</li>
                                <li>Matcha</li>
                                <li>Pi Lo Chun</li>
                            </ul>
                        </li>
                    </ul>
                </li>
            </ul>
        </li>
    </ul>
斯蒂芬·洛朗
dat <- tibble::tribble(
  ~level1,~level2,~level3,~level4,
  "Beverages","Water","","",
  "Beverages","Coffee","","",
  "Beverages","Tea","Black tea","",
  "Beverages","Tea","White tea","",
  "Beverages","Tea","Green tea","Sencha",
  "Beverages","Tea","Green tea","Gyokuro",
  "Beverages","Tea","Green tea","Matcha",
  "Beverages","Tea","Green tea","Pi Lo Chun"
)

paths <- data.frame(pathString = apply(dat, 1, paste0, collapse = "/"))

library(data.tree)
tree <- as.Node(paths)
LL <- as.list(tree)
L <- LL[-1]

library(htmltools)

f <- function(node, nodeName){
  if(all(lengths(node) == 0) && length(names(node))){
    tagList(
      tags$p(nodeName),
      do.call(tags$ul, unname(lapply(names(node), tags$li)))
    )
  }else{
    if(length(names(node))){
      tags$li(
        tags$p(nodeName),
        do.call(tags$ul, mapply(f, node, names(node), SIMPLIFY = FALSE, USE.NAMES = FALSE))
      )
    }else{
      tags$li(
        tags$p(nodeName)
      )
    }
  }
}

lis <- mapply(f, L, names(L), SIMPLIFY = FALSE, USE.NAMES = FALSE)
ul <- do.call(tags$ul, lis)

html <- as.character(tagList(tags$p(LL$name), ul))

> cat(html)
<p>Beverages</p>
<ul>
  <li>
    <p>Water</p>
  </li>
  <li>
    <p>Coffee</p>
  </li>
  <li>
    <p>Tea</p>
    <ul>
      <li>
        <p>Black tea</p>
      </li>
      <li>
        <p>White tea</p>
      </li>
      <p>Green tea</p>
      <ul>
        <li>Sencha</li>
        <li>Gyokuro</li>
        <li>Matcha</li>
        <li>Pi Lo Chun</li>
      </ul>
    </ul>
  </li>
</ul>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章