首页 > 解决方案 > 根据R中的数据帧名称合并存储在不同长度列表中的数据帧

问题描述

我有以下两个列表:

A_1 <- data.frame(col1 = 1:5, col2 = rnorm(5))
A_2 <- data.frame(col1 = 1:5, col2 = rnorm(5))
B_1 <- data.frame(col1 = 1:5, col2 = rnorm(5))
B_2 <- data.frame(col1 = 1:5, col2 = rnorm(5))
B_3 <- data.frame(col1 = 1:5, col2 = rnorm(5))
C_1 <- data.frame(col1 = 1:5, col2 = rnorm(5))
list1 <- list(A_1 = A_1, A_2 = A_2, B_1 = B_1, B_2 = B_2, B_3 = B_3, C_1 = C_1)
A <- data.frame(col1 = 1:5, col3 = LETTERS[1:5])
B <- data.frame(col1 = 1:5, col3 = LETTERS[6:10])
C <- data.frame(col1 = 1:5, col3 = LETTERS[11:15])
list2 <- list(A = A, B = B, C = C)

我想根据数据框名称中的字母将数据框与列中的数据框list1合并list2col1换句话说,我想将A_1fromlist1Afrom合并list2;我想与A_2from合并;我想与from合并;我想与from合并;我想与from合并;我想合并from与from 。生成的数据框列表应如下所示:list1Alist2B_1list1Blist2B_2list1Blist2B_3list1Blist2C_1list1Clist2

$A_1
  col1        col2 col3
1    1  0.06356074    A
2    2 -0.08646429    B
3    3  0.65156169    C
4    4  0.83935642    D
5    5 -0.76709566    E

$A_2
  col1       col2 col3
1    1  0.3347519    A
2    2 -1.5905887    B
3    3 -0.6629217    C
4    4 -1.0208914    D
5    5 -0.3978965    E

$B_1
  col1       col2 col3
1    1  0.5910048    F
2    2 -0.7017961    G
3    3  0.4436402    H
4    4  0.5051056    I
5    5  1.9631446    J

$B_2
  col1        col2 col3
1    1  1.59825082    F
2    2  1.12307589    G
3    3  0.55073043    H
4    4  0.06900526    I
5    5 -1.74212727    J

$B_3
  col1         col2 col3
1    1 -3.408669559    F
2    2  0.871771331    G
3    3 -1.811021818    H
4    4  1.735995986    I
5    5 -0.007419926    J

$C_1
  col1       col2 col3
1    1 -0.6678336    K
2    2  1.5844579    L
3    3 -1.4021920    M
4    4 -1.1643714    N
5    5 -0.3893558    O

我该怎么做呢?谢谢!

标签: r

解决方案


match列表名称,然后循环使用Mapmerge每个列表中的适当数据集:

m <- match(substr(names(list1),1,1), names(list2))
Map(merge, list1, list2[m], by="col1")

purrr/dplyr/tidyverse相当于:

map2(list1, list2[m], left_join)

推荐阅读