R 数据表中闪亮的父子行

Posted

技术标签:

【中文标题】R 数据表中闪亮的父子行【英文标题】:R Shiny parent child rows in datatable 【发布时间】: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

【问题讨论】:

【参考方案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 将为您提供功能

以上是关于R 数据表中闪亮的父子行的主要内容,如果未能解决你的问题,请参考以下文章

在闪亮的 R 中使用 selectInput 来选择和过滤行,而不是选择列

R闪亮:更新data.table中的选择输入值

R闪亮包中的父/子行

在图表中选择活动跟踪并在 R 闪亮的数据表中显示

R闪亮,找不到对象'输入'。

如何在R中闪亮的数据帧中强制反应