Tidyr: 如何嵌套到单个列表列与数据框列表中?

创建于 2016-05-06  ·  3评论  ·  资料来源: tidyverse/tidyr

按照指示(https://github.com/hadley/dplyr/issues/1800),我在这里发布这个问题。

在嵌套数据框时进行这种变化的最佳方法是什么? 我不想使用tidyr::nest()因为我不想将其他变量埋在数据框中——我希望它们作为单独的列表列。 像这样的东西:

library(dplyr)
mtcars %>%
  group_by(cyl) %>%
  summarize(gear = split(gear, cyl),
            wt = split(wt, cyl))
#> Source: local data frame [3 x 3]
#> 
#>     cyl       gear         wt
#>   <dbl>     <list>     <list>
#> 1     4 <dbl [11]> <dbl [11]>
#> 2     6  <dbl [7]>  <dbl [7]>
#> 3     8 <dbl [14]> <dbl [14]>

从那以后,我找到了另一种使用purrr::transpose()

library(purrr)
library(dplyr)
library(tidyr)

mtcars %>% 
  group_by(cyl) %>% 
  nest(gear, wt) %>% 
  bind_cols(transpose(.$data)) %>% 
  select(-data)
#> Source: local data frame [3 x 3]
#> 
#>     cyl       gear         wt
#>   <dbl>     <list>     <list>
#> 1     6  <dbl [7]>  <dbl [7]>
#> 2     4 <dbl [11]> <dbl [11]>
#> 3     8 <dbl [14]> <dbl [14]>

最有用的评论

我认为最简单的方法可能是:

library(dplyr)

mtcars %>%
  group_by(cyl) %>%
  summarize(gear = list(gear), wt = list(wt))

我不确定这是否值得一个新的顶级动词。

你能提供更多关于更广泛背景的信息吗?

所有3条评论

我认为最简单的方法可能是:

library(dplyr)

mtcars %>%
  group_by(cyl) %>%
  summarize(gear = list(gear), wt = list(wt))

我不确定这是否值得一个新的顶级动词。

你能提供更多关于更广泛背景的信息吗?

您创建结果的方式要简洁得多。

直接触发是创建示例来弄清楚为什么我不能unnest()某些数据帧,结果证明这是dplyr::combine() (https://github.com/hadley/dplyr/问题/1780)。

我会关闭。 如果这在现实生活中很重要,它会再次出现。

看到最后一个解决方案让我意识到summarise_each()是另一种选择。

library(dplyr)
mtcars %>%
  group_by(cyl) %>%
  summarise_each("list", gear, wt)
#> Source: local data frame [3 x 3]
#> 
#>     cyl       gear         wt
#>   <dbl>     <list>     <list>
#> 1     4 <dbl [11]> <dbl [11]>
#> 2     6  <dbl [7]>  <dbl [7]>
#> 3     8 <dbl [14]> <dbl [14]>
此页面是否有帮助?
0 / 5 - 0 等级