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,但我不确定
使用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)
| 归档时间: |
|
| 查看次数: |
4103 次 |
| 最近记录: |