在 R 中将多个列表列合并为一个列表列?

use*_*745 3 r dataframe dplyr purrr

当使用包含列表列的 data.frame 时,如何组合多列列表,以便将它们的按行内容组合成单列列表?

例子

这是一个两列的 data.frame (两列都是列表的列)

df <- structure(list(foo = list(c("foo1", "foo1.1"), "foo2", 
    "foo3"), bar = list("bar1", 
    "bar2", "bar3")), row.names = c(NA, 
-3L), class = c("tbl_df", "tbl", "data.frame"))

Run Code Online (Sandbox Code Playgroud)

我们如何制作第三列,它也是一列列表,但每一行都包含其他两列中列表的内容?

例如,第一行将包含 中的 2 个项目df[1, 1]$foo 中的单个项目df[1,2]$bar;也就是说,这三个项目在一个列表中foo1 foo1.1 bar(当然第二行、第三行等也相同)

注意:我怀疑解决方案可能涉及 purrr,但我不确定

tmf*_*mnk 5

使用dplyr,您可以执行以下操作:

df %>%
 mutate(foo_bar = mapply(c, foo, bar))

  foo       bar       foo_bar  
  <list>    <list>    <list>   
1 <chr [2]> <chr [1]> <chr [3]>
2 <chr [1]> <chr [1]> <chr [2]>
3 <chr [1]> <chr [1]> <chr [2]>
Run Code Online (Sandbox Code Playgroud)

或者添加purrr

df %>%
 mutate(foo_bar = map2(foo, bar, c))
Run Code Online (Sandbox Code Playgroud)

具有多个列:

df %>%
 mutate(bar2 = bar) %>%
 mutate(res = pmap(across(everything()), c))

  foo       bar       bar2      res      
  <list>    <list>    <list>    <list>   
1 <chr [2]> <chr [1]> <chr [1]> <chr [4]>
2 <chr [1]> <chr [1]> <chr [1]> <chr [3]>
3 <chr [1]> <chr [1]> <chr [1]> <chr [3]>
Run Code Online (Sandbox Code Playgroud)