簡體   English   中英

跨/在嵌套數據框內聯接

[英]Join across/within nested dataframes

我正在從模型中提取信息以進行最終繪圖。 我想要的圖是抖動的原始數據,覆蓋了平均值+/- STDERR和文本分組。 模型輸出將分組和估計放在列表中的單獨數據框中。 我正在使用地圖提取這些內容,並且可以正常工作,但是我堅持將它們連接在一起的步驟。

我想將兩個嵌套的list-cols合並到一個表中,並將其嵌套為新列。 目前,我能做的最好的事情就是取消嵌套,聯接表,再次嵌套以及聯接回到原始的嵌套表。

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

我可以嵌套每個人並加入他們,但是 我不能嵌套並加入他們。 實際上,我可以...僅需要定義連接鍵,否則它將嘗試基於嵌套DF連接,並且沒有下面的哈希將無法正常工作。

full_join(unnest(carnestdf , estimates), unnest(carnestdf , grouping)) %>%
group_by(gear) %>%
nest(.key = "estgrp") %>%
full_join(carnestdf, ., by = "gear")

我發現了這一點: R:通過* list *列連接兩個表(小標題)

但這似乎不起作用,使用散列連接時出現相同的錯誤。 它確實有效,需要在嵌套中定義.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"))

答案顯然是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

這將通過“ trt”對兩個表進行完全連接,並使用結果創建一個新的列表列。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM