【问题标题】:R Shiny parent child rows in datatableR 数据表中闪亮的父子行
【发布时间】:2021-12-07 04:39:25
【问题描述】:

我正在尝试在我正在构建的闪亮应用中重用这个子/父行的可数据示例:

https://rstudio.github.io/DT/002-rowdetails.html

还有一个细微的修改,允许添加多行:

https://github.com/rstudio/DT/issues/393#issuecomment-279627237

但是,我的情况有点不同。我有一个主要分组父变量和子行的数据框。子行可以是从 0 到 n 的任何值。我想显示我的父变量一次,所有子变量都隐藏在它下面。

以下是一些示例数据:

library(dplyr)
df = data.frame() %>%
  rbind(c("parent1", "childA", "desc1")) %>%
  rbind(c("parent1", "childB", "desc2")) %>%
  rbind(c("parent2", "childC", "desc3")) %>%
  rbind(c("parent3", "childD", "desc4")) %>%
  rbind(c("parent4", "childE", "desc5")) %>%
  rbind(c("parent4", "childF", "desc6")) %>%
  rbind(c("parent4", "childG", "desc7")) %>%
  `colnames<-`(c("parentID", "childID", "childDesc"))

警告:我不懂 javascript,也不知道如何调整此类代码。我已经看到了多个尝试解决相同问题的示例,但是,它们有很多代码和自定义。我希望上面更简单的示例更容易修改,并且有人可以引导我完成它。我也不需要任何花哨的格式。以下是我见过的一些例子:

Parent/Child Rows in R

Parent/Child Rows in Shiny R with a single dataframe that has a variable number of rows

Parent/Child Rows in R shiny Package

Parent/Child Rows in Shiny R with a single dataframe that has a variable number of rows

【问题讨论】:

    标签: javascript r shiny parent-child dt


    【解决方案1】:

    您可以在服务器部分使用此代码:

        output$txt <- renderUI({
      df = 
        data.frame() %>%
        rbind(c("parent1", "childA", "desc1")) %>%
        rbind(c("parent1", "childB", "desc2")) %>%
        rbind(c("parent2", "childC", "desc3")) %>%
        rbind(c("parent3", "childD", "desc4")) %>%
        rbind(c("parent4", "childE", "desc5")) %>%
        rbind(c("parent4", "childF", "desc6")) %>%
        rbind(c("parent4", "childG", "desc7")) %>%
        `colnames<-`(c("parentID", "childID", "childDesc")) %>%
        # this has already been done by you
        group_by(parentID) %>% #you group the frame by parents
        summarise(children = paste(childID, collapse  = "</p><p>"))%>% 
        #apply the aggregate function
        mutate(concatenated = paste0("<h3>", parentID, "</h3>", "<p>", children,"</p>"))
        #combine the two columns:
      HTML(paste(df$concatenated, sep = '<br/>'))
      
    }) 
    

    代码将对数据框进行分组,然后用 html 标签作为分隔符聚合必要的字符串。结果字符串将被渲染。

    此行在 UI 中是必需的,用于输出呈现的 HTML:

    htmlOutput("txt")
    

    这是您在浏览器中看到的:

    【讨论】:

    • 非常感谢您。您将如何折叠和展开父行,即隐藏子行。
    • @Cola4ever 这是一项更复杂的任务。请参阅shinyTree 库。如果对您有帮助,您可以接受答案。
    • @Cola4ever 您还可以使用ul / li 标签将它们添加到所示的表达式中。 Css 将为您提供功能
    猜你喜欢
    • 2018-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-07
    • 1970-01-01
    • 2020-05-28
    • 2014-05-13
    • 2018-12-02
    相关资源
    最近更新 更多