英文:
Creating a data frame out of a list of element with different length
问题
我有一个具有不同长度数值元素的形式的列表
list1 <- 1:2
list2 <- 1:3
list3 <- c(10, 100)
mylist <- list(a = list1, b = list2, c = list3)
我想将它转换成一个数据框,就像这样
# a 1
# a 2
# b 1
# b 2
# b 3
# c 10
# c 100
有办法可以做到吗?
英文:
I have a with numerical elements of different length of the form
list1 <- 1 : 2
list2 <- 1 : 3
list3 <- c(10, 100)
mylist <- list(a = list1, b = list2, c = list3)
and I would like to transform it into a data frame like this one
# a 1
# a 2
# b 1
# b 2
# b 3
# c 10
# c 100
Is there a way to do it?
答案1
得分: 1
我们可以直接在一个list
上应用expand.grid
:
expand.grid(mylist)
或者使用tidyr
中的expand_grid
:
library(tidyr)
expand_grid(!!!mylist)
对于更新后的数据集:
library(tibble)
enframe(mylist) %>%
unnest(value)
英文:
We could directly apply expand.grid
on a list
expand.grid(mylist)
Or with expand_grid
from tidyr
library(tidyr)
expand_grid(!!!mylist)
For the updated dataset
library(tibble)
enframe(mylist) %>%
unnest(value)
</details>
# 答案2
**得分**: 0
使用 lapply
替代 expand.grid
的另一种方法:
data.frame(do.call(rbind, lapply(mylist$b, function(x) cbind(x, y = mylist$a))))
x y
1 1 1
2 1 2
3 1 3
4 1 4
5 1 5
6 2 1
7 2 2
8 2 3
9 2 4
10 2 5
11 3 1
12 3 2
13 3 3
14 3 4
15 3 5
英文:
An alternative to e.g. expand.grid
using lapply
data.frame(do.call(rbind, lapply(mylist$b, function(x) cbind(x, y = mylist$a))))
x y
1 1 1
2 1 2
3 1 3
4 1 4
5 1 5
6 2 1
7 2 2
8 2 3
9 2 4
10 2 5
11 3 1
12 3 2
13 3 3
14 3 4
15 3 5
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论