зацикливание на двух списках функции merge () по именам строк нескольких фреймов данных с одинаковым именем - PullRequest
1 голос
/ 11 октября 2019

У меня есть два списка фреймов данных mylist_a и mylist_b. Имена фреймов данных совпадают в двух списках. Мне нужно объединить по именам строк (by=0) все кадры данных mylist_a и mylist_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 с объединенными фреймами данных

Может кто-нибудь помочь с этим?

1 Ответ

1 голос
/ 11 октября 2019

Мы можем использовать Map для этого

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

data

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")))
...