仅在一个tibble数据帧中转换向量列表

时间:2018-06-10 18:05:59

标签: r tibble

我有两个清单。它们每个都有许多不同长度的矢量(大约500个),我想得到一个有三列的tibble数据帧。

我可重复的例子如下:

> a
[[1]]
[1] 1 3 6

[[2]]
[1] 5 4
> b
[[1]]
[1] 3 4

[[2]]
[1] 5 6 7

我想得到以下的tibble数据框:

name index value
a    1     1
a    1     3
a    1     6
a    2     5
a    2     4
b    1     3
b    1     4
b    2     5
b    2     6
b    2     7

如果有人能帮我解决这个问题,我将不胜感激

2 个答案:

答案 0 :(得分:1)

使用Base R:

transform(stack(c(a=a,b=b)),name=substr(ind,1,1),ind=substr(ind,2,2))
   values ind name
1       1   1    a
2       2   1    a
3       3   1    a
4       5   2    a
5       6   2    a
6       3   1    b
7       4   1    b
8       5   2    b
9       6   2    b
10      7   2    b

使用tidyverse:

library(tidyverse)
list(a=a,b=b)%>%map(~stack(setNames(.x,1:length(.x))))%>%bind_rows(.id = "name")
   name values ind
1     a      1   1
2     a      2   1
3     a      3   1
4     a      5   2
5     a      6   2
6     b      3   1
7     b      4   1
8     b      5   2
9     b      6   2
10    b      7   2

答案 1 :(得分:0)

以下是tidyverse

的一个选项
library(tidyverse)
list(a= a, b = b) %>%
      map_df(enframe, name = "index", .id = 'name') %>% 
      unnest
# A tibble: 10 x 3
#   name  index value
#   <chr> <int> <dbl>
# 1 a     1         1
# 2 a     1         3
# 3 a     1         6
# 4 a     2         5
# 5 a     2         4
# 6 b     1         3
# 7 b     1         4
# 8 b     2         5
# 9 b     2         6
#10 b     2         7

数据

a <- list(c(1, 3, 6), c(5, 4))
b <- list(c(3, 4), c(5, 6, 7))