如何在 R 中制作一个包含不同长度子列表的数据框?
How I can make a data frame with a list of sublist with different lengths in R?
我在 R 中有一个子列表列表。但是,这些列表的长度不同。我想用这个子列表创建一个数据框。然而,挑战在于每个子列表的第一项必须为子列表的其他项目重复。第一项是其他子列表子项的关键变量。我的列表是这样的:
lista <- list(list("data pregão 16187465 1 27/08/2020 clear",
"1-bovespa c vista itausa pn ed n1 100 9,67 967,00 d"),
list("data pregão 17212976 1 10/09/2020 clear",
"1-bovespa v vista itausa pn ed n1 100 9,40 940,00 c"),
list("data pregão 19759871 1 19/10/2020 clear",
c("1-bovespa c fracionario magaz luiza on eb nm # 1 25,76 25,76 d", "1-bovespa c fracionario magaz luiza on eb nm # 9 25,76 231,84 d", "1-bovespa c fracionario magaz luiza on eb nm 40 25,76 1.030,40 d", "1-bovespa c fracionario mrv on ed nm 40 18,14 725,60 d")))
分别提取第一个和第二个元素,通过使用 map
遍历外部列表创建一个 tibble
并使用后缀 _dfr
将它们绑定在一起
library(purrr)
map_dfr(lista, ~ tibble(col1 = .x[[1]], col2 = .x[[2]]))
-输出
# A tibble: 6 x 2
# col1 col2
# <chr> <chr>
#1 data pregão 16187465 1 27/08/2020 clear 1-bovespa c vista itausa pn ed n1 100 9,67 967,00 d
#2 data pregão 17212976 1 10/09/2020 clear 1-bovespa v vista itausa pn ed n1 100 9,40 940,00 c
#3 data pregão 19759871 1 19/10/2020 clear 1-bovespa c fracionario magaz luiza on eb nm # 1 25,76 25,76 d
#4 data pregão 19759871 1 19/10/2020 clear 1-bovespa c fracionario magaz luiza on eb nm # 9 25,76 231,84 d
#5 data pregão 19759871 1 19/10/2020 clear 1-bovespa c fracionario magaz luiza on eb nm 40 25,76 1.030,40 d
#6 data pregão 19759871 1 19/10/2020 clear 1-bovespa c fracionario mrv on ed nm 40 18,14 725,60 d
或者可以使用 bind_cols
和 map
library(dplyr)
map_dfr(lista, bind_cols)
或使用base R
do.call(rbind, lapply(lista, function(x)
as.data.frame(x, col.names = c('col1', 'col2'))))
我在 R 中有一个子列表列表。但是,这些列表的长度不同。我想用这个子列表创建一个数据框。然而,挑战在于每个子列表的第一项必须为子列表的其他项目重复。第一项是其他子列表子项的关键变量。我的列表是这样的:
lista <- list(list("data pregão 16187465 1 27/08/2020 clear",
"1-bovespa c vista itausa pn ed n1 100 9,67 967,00 d"),
list("data pregão 17212976 1 10/09/2020 clear",
"1-bovespa v vista itausa pn ed n1 100 9,40 940,00 c"),
list("data pregão 19759871 1 19/10/2020 clear",
c("1-bovespa c fracionario magaz luiza on eb nm # 1 25,76 25,76 d", "1-bovespa c fracionario magaz luiza on eb nm # 9 25,76 231,84 d", "1-bovespa c fracionario magaz luiza on eb nm 40 25,76 1.030,40 d", "1-bovespa c fracionario mrv on ed nm 40 18,14 725,60 d")))
分别提取第一个和第二个元素,通过使用 map
遍历外部列表创建一个 tibble
并使用后缀 _dfr
library(purrr)
map_dfr(lista, ~ tibble(col1 = .x[[1]], col2 = .x[[2]]))
-输出
# A tibble: 6 x 2
# col1 col2
# <chr> <chr>
#1 data pregão 16187465 1 27/08/2020 clear 1-bovespa c vista itausa pn ed n1 100 9,67 967,00 d
#2 data pregão 17212976 1 10/09/2020 clear 1-bovespa v vista itausa pn ed n1 100 9,40 940,00 c
#3 data pregão 19759871 1 19/10/2020 clear 1-bovespa c fracionario magaz luiza on eb nm # 1 25,76 25,76 d
#4 data pregão 19759871 1 19/10/2020 clear 1-bovespa c fracionario magaz luiza on eb nm # 9 25,76 231,84 d
#5 data pregão 19759871 1 19/10/2020 clear 1-bovespa c fracionario magaz luiza on eb nm 40 25,76 1.030,40 d
#6 data pregão 19759871 1 19/10/2020 clear 1-bovespa c fracionario mrv on ed nm 40 18,14 725,60 d
或者可以使用 bind_cols
和 map
library(dplyr)
map_dfr(lista, bind_cols)
或使用base R
do.call(rbind, lapply(lista, function(x)
as.data.frame(x, col.names = c('col1', 'col2'))))