У меня есть два разных списка данных. Некоторые кадры данных в двух списках имеют одинаковые имена, а другие - нет. Когда я объединяю два списка, мне нужно объединить кадры данных с одинаковыми именами в стиле rbind, а также те, которые являются уникальными в обоих списках, чтобы оставаться как уникальные кадры данных и привязываться к недавно созданному объединенному списку кадров данных.
В списке list1, скорее всего, будет больше кадров данных и больше строк на кадр данных, чем в list2, поскольку он будет кумулятивно связанным списком в результате al oop. List2 - это новый результат каждого l oop, который будет добавлен в накопительный список 1.
Пример макета:
mydf1 <- data.frame(V1=1, V2=rep("A", 4))
mydf2 <- data.frame(V1=1, V2=rep("B", 3))
mydf3 <- data.frame(V1=1, V2=rep("C", 2))
mydf4 <- data.frame(V1=2, V2="A")
mydf5 <- data.frame(V1=3, V2="C")
mydf6 <- data.frame(V1=4, V2="D")
mydf7 <- data.frame(V1=7, V2="E")
list1 <- list(AA=mydf1, BB=mydf2, CC=mydf3)
list2 <- list(AA=mydf4, CC=mydf5, DD=mydf6, EE=mydf7)
Ожидаемый результат:
$AA
V1 V2
1 1 A
2 1 A
3 1 A
4 1 A
1 2 A
$BB
V1 V2
1 1 B
2 1 B
3 1 B
$CC
V1 V2
1 1 C
2 1 C
1 3 C
$DD
V1 V2
1 4 D
$EE
V1 V2
1 7 E
I пробовал с решением здесь , но не смог заставить их работать должным образом.
Это решение не собирает правильные кадры данных и создает другие странные комбинации.
(m <- match(names(list2), names(list1), nomatch = 0L))
# [1] 1 1 2
Map(rbind, list1[m], list2)
и этот, кажется, просто никогда не привязывает кадры данных с одинаковыми именами, все кадры данных просто сохраняют 1 строку.
stackMe <- function(x) {
a <- eval.parent(quote(names(X)))[substitute(x)[[3]]]
rbind(list1[[a]], x)
}
lapply(list2, stackMe)
Как объединить два списка фреймов данных, в которых эти фреймы с одинаковым именем просто добавляют / связывают строки, а другие уникальные фреймы данных просто добавляются в список?