如何将固定大小 X 的列列表分隔为 X 不同的列?
How to separate a column list of fixed size X to X different columns?
我有一个 tibble
,其中一列是 list
列,总是 有两个名为 a
和 [=15 的数值=](例如,调用 purrr:map
到 returns 一个 list 的函数的结果,说:
df <- tibble(x = 1:3, y = list(list(a = 1, b = 2), list(a = 3, b = 4), list(a = 5, b = 6)))
df
# A tibble: 3 × 2
x y
<int> <list>
1 1 <list [2]>
2 2 <list [2]>
3 3 <list [2]>
如何将列表列 y
分成两列 a
和 b
,并得到:
df_res <- tibble(x = 1:3, a = c(1,3,5), b = c(2,4,6))
df_res
# A tibble: 3 × 3
x a b
<int> <dbl> <dbl>
1 1 1 2
2 2 3 4
3 3 5 6
正在寻找类似 tidyr::separate
的东西来处理列表而不是字符串。
使用 dplyr(当前版本:0.7.0):
bind_cols(df[1], bind_rows(df$y))
# # A tibble: 3 x 3
# x a b
# <int> <dbl> <dbl>
# 1 1 1 2
# 2 2 3 4
# 3 3 5 6
根据 OP 的评论进行编辑:
要将其嵌入到管道中,如果您有许多非列表列,我们可以尝试:
df %>% select(-y) %>% bind_cols(bind_rows(df$y))
我们还可以利用 purrr
中的 map_df
library(tidyverse)
df %>%
summarise(x = list(x), new = list(map_df(.$y, bind_rows))) %>%
unnest
# A tibble: 3 x 3
# x a b
# <int> <dbl> <dbl>
#1 1 1 2
#2 2 3 4
#3 3 5 6
我有一个 tibble
,其中一列是 list
列,总是 有两个名为 a
和 [=15 的数值=](例如,调用 purrr:map
到 returns 一个 list 的函数的结果,说:
df <- tibble(x = 1:3, y = list(list(a = 1, b = 2), list(a = 3, b = 4), list(a = 5, b = 6)))
df
# A tibble: 3 × 2
x y
<int> <list>
1 1 <list [2]>
2 2 <list [2]>
3 3 <list [2]>
如何将列表列 y
分成两列 a
和 b
,并得到:
df_res <- tibble(x = 1:3, a = c(1,3,5), b = c(2,4,6))
df_res
# A tibble: 3 × 3
x a b
<int> <dbl> <dbl>
1 1 1 2
2 2 3 4
3 3 5 6
正在寻找类似 tidyr::separate
的东西来处理列表而不是字符串。
使用 dplyr(当前版本:0.7.0):
bind_cols(df[1], bind_rows(df$y))
# # A tibble: 3 x 3
# x a b
# <int> <dbl> <dbl>
# 1 1 1 2
# 2 2 3 4
# 3 3 5 6
根据 OP 的评论进行编辑:
要将其嵌入到管道中,如果您有许多非列表列,我们可以尝试:
df %>% select(-y) %>% bind_cols(bind_rows(df$y))
我们还可以利用 purrr
map_df
library(tidyverse)
df %>%
summarise(x = list(x), new = list(map_df(.$y, bind_rows))) %>%
unnest
# A tibble: 3 x 3
# x a b
# <int> <dbl> <dbl>
#1 1 1 2
#2 2 3 4
#3 3 5 6