【问题标题】:loop over two lists the merge() function by rownames of multiple dataframes with same name通过具有相同名称的多个数据帧的行名遍历两个列表合并()函数
【发布时间】:2020-02-09 03:52:33
【问题描述】:

我有两个数据框列表 mylist_amylist_b。两个列表中的数据框名称相同。 我需要按行名(by=0) 合并mylist_amylist_b 的所有数据框,获得mylist_c

这是数据框的示例

head(mylist_a$aa)
                              D1  D2  D3
a                             52  41  55
b                            103 111 104
c                             15  12  16
d                              3   2   0
e                              1   1   0
f                              0   0   2

head(mylist_b$aa)
                                      D1           D2        D3
a                             0.68659264 1.0000000000 1.0000000
b                             0.02358574 0.0007992743 0.3253237
c                             1.00000000 1.0000000000 1.0000000
d                             1.00000000 1.0000000000 1.0000000
e                             1.00000000 1.0000000000 1.0000000
f                             1.00000000 1.0000000000 1.0000000

当我使用简单的函数merge(mylist_a$aa, mylist_b$aa, by=0) 时,它可以完美运行,这就是我得到的:

Row.names   D1.x    D2.x    D3.x    D1.y    D2.y    D3.y
a           52  41  55  0.68659264  1.0000000000    1.0000000
b           103 111 104 0.02358574  0.0007992743    0.3253237
c           15  12  16  1.00000000  1.0000000000    1.0000000
d           3   2   0   1.00000000  1.0000000000    1.0000000
e           1   1   0   1.00000000  1.0000000000    1.0000000
f           0   0   2   1.00000000  1.0000000000    1.0000000 

我现在的问题是如何通过 lapply 列表获得 mylist_c 与合并的数据帧

有人可以帮忙吗?

【问题讨论】:

  • 您显示的输出与显示的输入数据不匹配

标签: r list dataframe merge lapply


【解决方案1】:

我们可以为此使用Map

Map(merge, mylist_a, mylist_b, MoreArgs = list(by = 0))

数据

mylist_a <- list(aa = structure(list(D1 = c(52L, 103L, 15L, 3L, 1L, 0L), 
    D2 = c(41L, 111L, 12L, 2L, 1L, 0L), D3 = c(55L, 104L, 16L, 
    0L, 0L, 2L)), class = "data.frame", row.names = c("a", "b", 
"c", "d", "e", "f")))

mylist_b <- list(aa = structure(list(D1 = c(0.68659264, 0.02358574, 1, 1, 
1, 1), D2 = c(1, 0.0007992743, 1, 1, 1, 1), D3 = c(1, 0.3253237, 
1, 1, 1, 1)), class = "data.frame", row.names = c("a", "b", "c", 
"d", "e", "f")))

【讨论】:

    猜你喜欢
    • 2016-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多