簡體   English   中英

在嵌套的 dataframe 中嵌套 dataframe

[英]Nest dataframe within a nested dataframe

我搜索了這個解決方案: Double nesting in the tidyverse然而,這似乎改變了外嵌套的附加列。 然而,我想嵌套在嵌套列表中,並繼續嵌套。

通過遵循該參考文章中的解決方案,我得到:

> outerNest %>% mutate(by_vs = map(data, ~.x %>% 
+                                             group_by(am) %>% 
+                                             nest()))
# A tibble: 2 × 3
# Groups:   vs [2]
     vs data               by_vs               
  <dbl> <list>             <list>              
1     0 <tibble [18 × 11]> <grouped_df [2 × 2]>
2     1 <tibble [14 × 11]> <grouped_df [2 × 2]>

我在哪里嘗試過以下內容:

outerNest %>% group_by(vs) %>% mutate_at(vars(matches("data")), map(.,function(x){map(x, function(y){ y %>% group_by(am) %>% nest()})}))

這會產生此錯誤:

UseMethod(“group_by”)中的錯誤:沒有適用於“group_by”的方法應用於 class“c('double','numeric')”的 object

select data作為迭代嵌套的列似乎存在問題。然而,如果我 select 單獨列:

outerNest %>% group_by(vs) %>% .['data'] %>% map(.,function(x){map(x, function(y){ y %>% group_by(am) %>% nest()})})

$data
$data[[1]]
# A tibble: 2 × 2
# Groups:   am [2]
     am data              
  <dbl> <list>            
1     1 <tibble [6 × 10]> 
2     0 <tibble [12 × 10]>

$data[[2]]
# A tibble: 2 × 2
# Groups:   am [2]
     am data             
  <dbl> <list>           
1     1 <tibble [7 × 10]>
2     0 <tibble [7 × 10]>

然而,這應該嵌套在 vs` 旁邊的data中。 預期的 output:

#most outer nest
# A tibble: 2 × 2
# Groups:   vs [2]
     vs data              
  <dbl> <list>            
1     0 <tibble [18 × 11]>
2     1 <tibble [14 × 11]>

#inner nest

# A tibble: 2 × 2
# Groups:   am [2]
     am data             
  <dbl> <list>           
1     1 <tibble [13 × 20]>
2     0 <tibble [19 × 20]>

我們可以使用

library(purrr)
library(dplyr)
outerNest %>%
    ungroup %>%
    mutate(data = map(data, ~ .x %>% 
    nest(data = -am)))

如果需要進一步嵌套

out <- outerNest %>% 
  ungroup %>%
    mutate(data = map(data, ~ .x %>%
       nest(data = -am) %>%
            mutate(data = map(data, ~ .x %>%
          nest(data = -gear))))) 

-檢查

> out$data[[1]]
# A tibble: 2 × 2
     am data            
  <dbl> <list>          
1     1 <tibble [2 × 2]>
2     0 <tibble [1 × 2]>

> out$data[[1]]$data
[[1]]
# A tibble: 2 × 2
   gear data            
  <dbl> <list>          
1     4 <tibble [2 × 9]>
2     5 <tibble [4 × 9]>

暫無
暫無

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

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