这实际上可以通过 base R 中的stack 来完成:
stack(lst)
values ind
1 248269 multiinstrumentais
2 248827 multiinstrumentais
3 248198 geds
4 248198 geds
5 248857 geds
6 248087 ghzmb
7 296994 ghzmb
8 302862 ghzmb
这是另一个使用dplyr 和tibble 的解决方案,虽然这会在行名称的末尾添加一个数字,但您可以通过将mutate(rowname = str_remove(rowname, pattern = '[[:digit:]]+')) 添加到链中来删除它:
library(tibble)
library(dplyr)
lst %>%
unlist() %>%
as.tibble() %>%
rownames_to_column()
返回:
# A tibble: 8 x 2
rowname value
<chr> <chr>
1 multiinstrumentais1 248269
2 multiinstrumentais2 248827
3 geds1 248198
4 geds2 248198
5 geds3 248857
6 ghzmb1 248087
7 ghzmb2 296994
8 ghzmb3 302862
或者使用tidyr 和dplyr,这似乎有效:
lst %>%
unlist() %>%
bind_rows() %>%
gather()
# Alternatively, this one liner
tidyr::gather(bind_rows(unlist(lst)))
使用 Val 的数据:
lst<- list(
multiinstrumentais=c("248269","248827"),
geds=c("248198","248198","248857"),
ghzmb=c("248087","296994","302862")
)