R 跨嵌套数据帧连接/在嵌套数据帧内连接

R 跨嵌套数据帧连接/在嵌套数据帧内连接,r,tidyverse,R,Tidyverse,我从模型中提取信息,以便最终绘图。我想要的图是抖动的原始数据,覆盖了均值+/-标准差和文本分组。模型输出将分组和估计放在列表中单独的数据帧中。我正在使用map来提取这些数据,它是有效的,但我一直坚持将它们连接在一起 我想将两个嵌套列表列联接到一个表中,并将结果嵌套为一个新列。目前我能做的最好的事情就是取消嵌套、连接表、再次嵌套,然后连接回原始嵌套表 library(agricolae) library(tidyverse) fitHSD2<- function(d) HSD.test(a

我从模型中提取信息,以便最终绘图。我想要的图是抖动的原始数据,覆盖了均值+/-标准差和文本分组。模型输出将分组和估计放在列表中单独的数据帧中。我正在使用map来提取这些数据,它是有效的,但我一直坚持将它们连接在一起

我想将两个嵌套列表列联接到一个表中,并将结果嵌套为一个新列。目前我能做的最好的事情就是取消嵌套、连接表、再次嵌套,然后连接回原始嵌套表

library(agricolae)
library(tidyverse)

fitHSD2<- function(d) HSD.test(aov(mpg ~ cyl, data= d), trt = "cyl")     # anova with Tukey HSD

carnestdf <-
    mtcars %>%
        group_by(gear) %>%
        nest() %>%
        mutate(mod = map(data, fitHSD2) # fit model
                        , estimates = map(mod, function(df) return(df$means)) # pull out estimates and StdErr
                        , estimates = map(estimates, function(df) return(rownames_to_column(df, var = "trt"))) #attach rownames as column for unnest
                        , grouping = map(mod, function(df) return(df$groups)) # pull out groupings
                        , grouping = map(grouping, function(df) mutate(df, trt = as.character(trt) # convert to character
                                                                                                        , trt = gsub("[[:space:]]*$", "", trt)
                                                                                                        , M = as.character(M)
                                                                                                        )
                                                    ) # remove whitespace at end for join
                        ) 

carnestdf
我发现:

但它似乎不起作用,我在使用哈希连接时也会遇到同样的错误。它确实有效,需要在嵌套中定义.key,这样它就不是“数据”。仍希望加入而不取消…:/

nestmerge <-
    full_join(unnest(carnestdf , estimates), unnest(carnestdf , grouping)) %>%
    group_by(gear) %>%
    nest(.key = "mergedestgrp") %>%
    mutate_all(funs(hash = map_chr(., digest::digest)))

carnestdf %>%
    mutate_all(funs(hash = map_chr(., digest::digest))) %>%
    full_join(., nestmerge) %>%
    select(-ends_with("hash"))
nestmerge%
分组依据(档位)%>%
嵌套(.key=“mergedestgrp”)%>%
mutate_all(funs(hash=map_chr(,digest::digest)))
carnestdf%>%
mutate_all(funs(hash=map_chr(,digest::digest)))%>%
完全联接(,嵌套合并)%>%
选择(-u以“哈希”结尾)

答案显然是map2:

carnestdf <-
    mtcars %>%
        group_by(gear) %>%
        nest() %>%
        mutate(mod = map(data, fitHSD2) # fit model
                        , estimates = map(mod, function(df) return(df$means)) # pull out estimates and StdErr
                        , estimates = map(estimates, function(df) return(rownames_to_column(df, var = "trt"))) #attach rownames as column for unnest
                        , grouping = map(mod, function(df) return(df$groups)) # pull out groupings
                        , grouping = map(grouping, function(df) mutate(df, trt = as.character(trt) # convert to character
                                                                                                        , trt = gsub("[[:space:]]*$", "", trt)
                                                                                                        , M = as.character(M)
                                                                                                        )
                                                    ) # remove whitespace at end for join
                        , estgrp = map2(estimates, grouping, ~full_join(.x, .y, by = "trt"))
                        ) 

carnestdf
carnestdf%
分组依据(档位)%>%
嵌套()%>%
变异(mod=map(数据,fitHSD2)#拟合模型
,estimates=map(mod,function(df)return(df$means))#提取估计值和StdErr
,estimates=map(estimates,function(df)return(rownames_to_column(df,var=“trt”))#将rownames附加为unnest的列
,grouping=map(mod,function(df)return(df$groups))#拉出分组
,grouping=map(分组,函数(df)mutate(df,trt=as.character(trt)#转换为character
,trt=gsub(“[[:空格:]*$”,“”,trt)
,M=as.字符(M)
)
)#删除连接末尾的空白
,estgrp=map2(估计,分组,~full_join(.x,.y,by=“trt”))
) 
卡内斯特夫

这通过“trt”对两个表进行完全联接,并使用结果生成一个新的列表列

答案显然是map2:

carnestdf <-
    mtcars %>%
        group_by(gear) %>%
        nest() %>%
        mutate(mod = map(data, fitHSD2) # fit model
                        , estimates = map(mod, function(df) return(df$means)) # pull out estimates and StdErr
                        , estimates = map(estimates, function(df) return(rownames_to_column(df, var = "trt"))) #attach rownames as column for unnest
                        , grouping = map(mod, function(df) return(df$groups)) # pull out groupings
                        , grouping = map(grouping, function(df) mutate(df, trt = as.character(trt) # convert to character
                                                                                                        , trt = gsub("[[:space:]]*$", "", trt)
                                                                                                        , M = as.character(M)
                                                                                                        )
                                                    ) # remove whitespace at end for join
                        , estgrp = map2(estimates, grouping, ~full_join(.x, .y, by = "trt"))
                        ) 

carnestdf
carnestdf%
分组依据(档位)%>%
嵌套()%>%
变异(mod=map(数据,fitHSD2)#拟合模型
,estimates=map(mod,function(df)return(df$means))#提取估计值和StdErr
,estimates=map(estimates,function(df)return(rownames_to_column(df,var=“trt”))#将rownames附加为unnest的列
,grouping=map(mod,function(df)return(df$groups))#拉出分组
,grouping=map(分组,函数(df)mutate(df,trt=as.character(trt)#转换为character
,trt=gsub(“[[:空格:]*$”,“”,trt)
,M=as.字符(M)
)
)#删除连接末尾的空白
,estgrp=map2(估计,分组,~full_join(.x,.y,by=“trt”))
) 
卡内斯特夫

这通过“trt”对两个表进行完全联接,并使用结果生成一个新的列表列

为了澄清,我希望有一个解决方案能够将嵌套数据框中的两个连接起来,或者提取、连接并作为新列连接回嵌套数据框。为了澄清,我希望有一个解决方案能够将嵌套数据框中的两个连接起来,或者提取、连接并作为新列连接回嵌套数据框。