按照指示(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))
我不确定这是否值得一个新的顶级动词。
你能提供更多关于更广泛背景的信息吗?
您创建结果的方式要简洁得多。
直接触发是创建示例来弄清楚为什么我不能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]>
最有用的评论
我认为最简单的方法可能是:
我不确定这是否值得一个新的顶级动词。
你能提供更多关于更广泛背景的信息吗?