# convert a list of vectors to data frame

```
df_list = lapply(a, function(x) data.frame(A = names(x), V = x, stringsAsFactors = FALSE))
dplyr::bind_rows(df_list, .id = "P")
# P A V
# 1 p1 A1 1.0
# 2 p1 A2 0.5
# 3 p1 A3 0.3
# 4 p2 A3 2.0
# 5 p2 A4 2.5
# 6 p2 A5 2.3
```

I like the way above, but here's an option that *might* be more efficient on a large list:

```
data.frame(V = unlist(a)) %>%
tibble::rownames_to_column() %>%
tidyr::separate(rowname, into = c("P", "A"))
```

One `purrr`

and `tibble`

option could be:

```
map_dfr(a, ~ enframe(., name = "A", value = "V"), .id = "P")
P A V
<chr> <chr> <dbl>
1 p1 A1 1
2 p1 A2 0.5
3 p1 A3 0.3
4 p2 A3 2
5 p2 A4 2.5
6 p2 A5 2.3
```

In base-R

```
cbind(stack(a),A=unlist(lapply(a,names),use.names = F))
```

gives

```
values ind A
1 1.0 p1 A1
2 0.5 p1 A2
3 0.3 p1 A3
4 2.0 p2 A3
5 2.5 p2 A4
6 2.3 p2 A5
```