将不同长度的命名向量列表转换为 tibble

ken*_*uri 1 r

我有以下清单

\n
example <- list(a = c(1, 2, 3),\n                b = c(2, 3),\n                c = c(3, 4, 5, 6))\n
Run Code Online (Sandbox Code Playgroud)\n

我想将其转换为以下小标题

\n
# A tibble: 9 \xc3\x97 2\n  name  value\n  <chr> <dbl>\n1 a         1\n2 a         2\n3 a         3\n4 b         2\n5 b         3\n6 c         3\n7 c         4\n8 c         5\n9 c         6\n
Run Code Online (Sandbox Code Playgroud)\n

我发现了有关此主题的多个 StackOverflow 问题,例如此处此处此处,但没有一个问题涉及向量名称不会成为列名称的特殊情况。

\n

我设法通过如下所示的良好旧循环实现了预期的结果,但我正在寻找一种更快、更优雅的方法。

\n
library(dplyr)\n\nexample_list <- list(a = c(1, 2, 3),\n                     b = c(2, 3),\n                     c = c(3, 4, 5, 6))\n\nexample_tibble <- tibble()\n\nfor (i in 1:length(example_list)) {\n  example_tibble <- example_tibble %>% \n    bind_rows(as_tibble(example_list[[i]]) %>% \n                mutate(name = names(example_list)[[i]]))\n}\n\nexample_tibble <- example_tibble %>% \n  relocate(name)\n
Run Code Online (Sandbox Code Playgroud)\n

Tho*_*ing 6

尝试stack

> stack(example)
  values ind
1      1   a
2      2   a
3      3   a
4      2   b
5      3   b
6      3   c
7      4   c
8      5   c
9      6   c
Run Code Online (Sandbox Code Playgroud)

  • `stack(example)[,2:1] |&gt; setNames(c("name", "value"))` (2认同)