首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将多个列表转换为一个数据帧

如何将多个列表转换为一个数据帧
EN

Stack Overflow用户
提问于 2017-11-13 05:24:15
回答 4查看 2.4K关注 0票数 0

我有一个列表,告诉你一个人有多少可能的伴侣。它看起来是这样的:

列表:

代码语言:javascript
复制
$`A1`
[1] "D2" "E2" "F2" "H2"
$`B1`
[1] "G2" "I2" "J2" "K2" "L2"
$`C1`
[1] "J2" "M2" "N2" "O2" "P2"
[6] "Q2" "R2" "S2"

例如,个体A1的可能伴侣是个体D2、个体E2、个体F2和个体H2。

我想把它变成一个数据框架,把一个个体和它可能的伴侣配对。所以我想要这样的东西:

df:

代码语言:javascript
复制
Female ID   Mate ID
       A1        D2    
       A1        E2
       A1        F2
       A1        H2
       B1        G2
       B1        I2
       B1        J2
       B1        K2
       B1        L2
       C1        J2
       C1        M2
       C1        N2
       C1        O2
       C1        P2
       C1        Q2
       C1        R2
       C1        S2
EN

回答 4

Stack Overflow用户

发布于 2017-11-13 05:34:15

我喜欢purrr:map_df来解决这个问题:

您的数据

代码语言:javascript
复制
L <- list(A1 = c("D2", "E2", "F2", "H2"),
    B1 = c("G2", "I2", "J2", "K2", "L2"),
    C1 = c("J2", "M2", "N2", "O2", "P2", "Q2", "R2", "S2"))

解决方案

代码语言:javascript
复制
library(purrr)
map_df(L, ~data.frame("Mate.ID" = .x), .id="Female.ID")

   # Female.ID Mate.ID
# 1         A1      D2
# 2         A1      E2
# 3         A1      F2
# 4         A1      H2
# 5         B1      G2
# etc

我喜欢map_df,因为它有一个有用的.id参数,可以附加列表条目的名称。

(这也可以写成...)

代码语言:javascript
复制
map_df(L, function(i) data.frame("Mate.ID" = i), .id="Female.ID")

(...the .xfunction(i) i的缩写)

票数 5
EN

Stack Overflow用户

发布于 2017-11-13 05:37:43

一种仅使用base R的解决方案:

代码语言:javascript
复制
mylist <- list(A1=c("D2", "E2", "F2", "H2"),
            B1=c("G2", "I2", "J2", "K2", "L2"),
            C1=c("J2", "M2", "N2", "O2", "P2", "Q2", "R2", "S2"))

mydf <- lapply(1:length(mylist), function(i) {
    data.frame(`Female ID`=names(mylist)[i], `Mate ID`=mylist[[i]], stringsAsFactors=F, check.names=F)
})

mydf <- do.call(rbind, mydf)
票数 2
EN

Stack Overflow用户

发布于 2019-07-18 07:24:01

你可以从R-开始使用stack -

代码语言:javascript
复制
L <- list(A1 = c("D2", "E2", "F2", "H2"),
    B1 = c("G2", "I2", "J2", "K2", "L2"),
    C1 = c("J2", "M2", "N2", "O2", "P2", "Q2", "R2", "S2"))

result <- stack(L)
names(result) <- c("MaleID", "FemaleID")

result

   MaleID FemaleID
1      D2       A1
2      E2       A1
3      F2       A1
4      H2       A1
5      G2       B1
6      I2       B1
7      J2       B1
8      K2       B1
9      L2       B1
10     J2       C1
11     M2       C1
12     N2       C1
13     O2       C1
14     P2       C1
15     Q2       C1
16     R2       C1
17     S2       C1
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47254147

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档