从组dplyr构造字符串

从组dplyr构造字符串,r,shiny,dplyr,shinytree,R,Shiny,Dplyr,Shinytree,我有一个很大的数据框,我正在尝试基于数据框中的组构造一个字符串,以便在中显示 以下是一个数据示例: dat <- data.frame("region" = c(paste("region", rep(1:3, each=4))), "area" = c(paste("area", rep(1:6, each=2))), "name" = c(paste("name",1:12))) 有没有办法在dplyr中使用mutate和gro

我有一个很大的数据框,我正在尝试基于数据框中的组构造一个字符串,以便在中显示

以下是一个数据示例:

dat <- data.frame("region" = c(paste("region", rep(1:3, each=4))),
              "area" = c(paste("area", rep(1:6, each=2))),
              "name" = c(paste("name",1:12)))
有没有办法在dplyr中使用mutate和groups来构造这个字符串?列表元素应连接到每个组的第一个匹配项上

我已经尝试过使用编译器::cmpfun嵌套for循环和嵌套lappy函数来加快它的速度,但事实证明这太慢了,无法构建。我的数据有5个级别和~3000行,处理需要~30秒,这对于一个闪亮的应用程序来说太慢了

任何帮助都将不胜感激。

这里是一个tidyverse解决方案。关键是使用summary和str_ccollapse=将相同的层次结构放在一起,然后使用mutate和str_c添加额外的列表调用和逗号/空格。include collapse=表示使用所需分隔符将字符向量转换为长度为1的字符向量,从而可以与summary一起使用。我会尝试一行一行地运行它,看看它是如何组合在一起的,或者格式化,然后删除层次结构。最后一个[[是把它变成一个字符串格式,而不是一个tibble。因为在实际代码中有更多的级别,我将更多重复的str_c调用包装到makelist和collapse函数中,以使它更清楚地显示何时发生了什么,更具可读性

注意:额外的好处是Summary删除了旧的变量以供使用,同时也删除了分组级别,因此我们不需要任何额外的group_by或任何select调用

图书馆管理员 待定% SummarseNames=羽衣甘蓝%>% mutatearea=makelistarea,名称%>% SummarySeareas=衣领earea%>% mutateregion=makelistregion,区域%>% 摘要区域=折叠区域%>% mutateliststr=str\u clist,区域,%>% `[[`1 >[1]列表“区域1”=列表“区域1”=列表“名称1”=,“名称2”=,“区域2”=列表“名称3”=,“名称4”=,“区域2”=列表“区域3”=列表“名称5”=,“名称6”=,“区域4”=列表“名称7”=,“名称8”=“区域3”=列表“区域5”=列表“名称9”=,“名称10”=“区域6”=列表“名称11”=,“名称12”=
由v0.2.0于2018-03-01创建。

这太棒了,它将施工时间从~30秒缩短到了0.13秒!非常感谢。
listString <- paste0("list('region 1' = list('area 1' = list('name 1'='', 'name 2'=''), 
                                         'area 2' = list('name 3'='', 'name 4'='')),
                       'region 2' = list('area 3' = list('name 5'='', 'name 6'=''), 
                                        'area 4' = list('name 7'='', 'name 8'='')),
                       'region 3' = list('area 5' = list('name 9'='', 'name 10'=''), 
                                        'area 6' = list('name 11'='', 'name 12'='')))")