【问题标题】:Dataframe from a vector and a list of vectors by replicating elements通过复制元素来自向量和向量列表的数据框
【发布时间】:2022-08-03 01:13:38
【问题描述】:
我有一个相同长度的向量和列表。该列表包含任意长度的向量,如下所示:
vec1 <- c(\"a\", \"b\", \"c\")
list1 <- list(c(1, 3, 2),
c(4, 5, 8, 9),
c(5, 2))
什么是创建数据帧的最快、最有效的方法,以便 vec1 的元素被复制与其在 list1 中的索引相对应的次数?
预期输出:
# col1 col2
# 1 a 1
# 2 a 3
# 3 a 2
# 4 b 4
# 5 b 5
# 6 b 8
# 7 b 9
# 8 c 5
# 9 c 2
我已经包含了一个整洁的解决方案作为答案,但我想知道是否还有其他方法可以完成这项任务。
标签:
r
list
dataframe
vector
tibble
【解决方案1】:
在base R 中,将list 的名称设置为'vec1',并使用stack 返回一个两列data.frame
stack(setNames(list1, vec1))[2:1]
-输出
ind values
1 a 1
2 a 3
3 a 2
4 b 4
5 b 5
6 b 8
7 b 9
8 c 5
9 c 2
【解决方案2】:
这个整洁的解决方案根据嵌套向量的长度复制 vec1 元素,然后将两个列表展平为一个小标题。
library(purrr)
library(tibble)
tibble(col1 = flatten_chr(map2(vec1, map_int(list1, length), function(x, y) rep(x, times = y))),
col2 = flatten_dbl(list1))
# # A tibble: 9 × 2
# col1 col2
# <chr> <dbl>
# 1 a 1
# 2 a 3
# 3 a 2
# 4 b 4
# 5 b 5
# 6 b 8
# 7 b 9
# 8 c 5
# 9 c 2