Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中:如何使用tidyverse将长度不等的向量列表强制为数据帧?_R_List_Tidyverse - Fatal编程技术网

在R中:如何使用tidyverse将长度不等的向量列表强制为数据帧?

在R中:如何使用tidyverse将长度不等的向量列表强制为数据帧?,r,list,tidyverse,R,List,Tidyverse,假设R中有以下列表: list_test <- list(c(2,4,5, 6), c(1,2,3), c(7,8)) 我试图用tidyverse找到一个解决方案,但要么丢失了列表的索引/名称,要么向量长度不相等。您可以给列表命名,然后在base R中使用堆栈 names(list_test) <- seq_along(list_test) stack(list_test) # values ind #1 2 1 #2 4 1 #3 5

假设R中有以下列表:

list_test <- list(c(2,4,5, 6), c(1,2,3), c(7,8))

我试图用tidyverse找到一个解决方案,但要么丢失了列表的索引/名称,要么向量长度不相等。

您可以给列表命名,然后在base R中使用
堆栈

names(list_test) <- seq_along(list_test)
stack(list_test)

#  values ind
#1      2   1
#2      4   1
#3      5   1
#4      6   1
#5      1   2
#6      2   2
#7      3   2
#8      7   3
#9      8   3
或者
imap\u dfr
来自
purr

purrr::imap_dfr(list_test, ~tibble::tibble(value = .x, list_index = .y))

您可以为列表命名,然后在base R中使用
stack

names(list_test) <- seq_along(list_test)
stack(list_test)

#  values ind
#1      2   1
#2      4   1
#3      5   1
#4      6   1
#5      1   2
#6      2   2
#7      3   2
#8      7   3
#9      8   3
或者
imap\u dfr
来自
purr

purrr::imap_dfr(list_test, ~tibble::tibble(value = .x, list_index = .y))

另一个选择是:

map_dfr(list_test, ~ enframe(.) %>%
         select(-name), .id = "name")

  name  value
  <chr> <dbl>
1 1         2
2 1         4
3 1         5
4 1         6
5 2         1
6 2         2
7 2         3
8 3         7
9 3         8
map\u-dfr(列表测试,~enframe(%)>%
选择(-name),.id=“name”)
名称值
1 1         2
2 1         4
3 1         5
4 1         6
5 2         1
6 2         2
7 2         3
8 3         7
9 3         8
或者,如果您不介意列也包含向量索引:

map_dfr(list_test, enframe, .id = "name_list")

  name_list  name value
  <chr>     <int> <dbl>
1 1             1     2
2 1             2     4
3 1             3     5
4 1             4     6
5 2             1     1
6 2             2     2
7 2             3     3
8 3             1     7
9 3             2     8
映射dfr(列表测试,enframe,.id=“名称列表”) 名称\列表名称值 1 1 1 2 2 1 2 4 3 1 3 5 4 1 4 6 5 2 1 1 6 2 2 2 7 2 3 3 8 3 1 7 9 3 2 8
另一个选项可以是:

map_dfr(list_test, ~ enframe(.) %>%
         select(-name), .id = "name")

  name  value
  <chr> <dbl>
1 1         2
2 1         4
3 1         5
4 1         6
5 2         1
6 2         2
7 2         3
8 3         7
9 3         8
map\u-dfr(列表测试,~enframe(%)>%
选择(-name),.id=“name”)
名称值
1 1         2
2 1         4
3 1         5
4 1         6
5 2         1
6 2         2
7 2         3
8 3         7
9 3         8
或者,如果您不介意列也包含向量索引:

map_dfr(list_test, enframe, .id = "name_list")

  name_list  name value
  <chr>     <int> <dbl>
1 1             1     2
2 1             2     4
3 1             3     5
4 1             4     6
5 2             1     1
6 2             2     2
7 2             3     3
8 3             1     7
9 3             2     8
映射dfr(列表测试,enframe,.id=“名称列表”) 名称\列表名称值 1 1 1 2 2 1 2 4 3 1 3 5 4 1 4 6 5 2 1 1 6 2 2 2 7 2 3 3 8 3 1 7 9 3 2 8
基本R
中,我们可以使用
长度
复制序列,并
取消列表
列表
元素放入一个两列的“data.frame”

data.frame(value = unlist(list_test), 
     list_index = rep(seq_along(list_test), lengths(list_test)))
#  value list_index
#1     2          1
#2     4          1
#3     5          1
#4     6          1
#5     1          2
#6     2          2
#7     3          2
#8     7          3
#9     8          3

base R
中,我们可以使用
length
复制序列,并
unlist
列表
元素复制到两列“data.frame”中

data.frame(value = unlist(list_test), 
     list_index = rep(seq_along(list_test), lengths(list_test)))
#  value list_index
#1     2          1
#2     4          1
#3     5          1
#4     6          1
#5     1          2
#6     2          2
#7     3          2
#8     7          3
#9     8          3

太神了非常感谢您的快速回复!我会尽快接受的!太神了非常感谢您的快速回复!我会尽快接受的!