我有两个列表 list1
和 list2
每个都包含由其名称唯一标识的数据框或数据表。我想合并 list1
和 list2
键入数据集的名称。我希望两个列表的元素都出现在组合列表中。我已经尝试了很多来自 stackoverflow 的解决方案,比如 do.call(c, list1, list2)
, Map(c, list1, list2)
或 mapply
, merge
, list.join
.我获得的最大成功是创建数据框名称的键并使用 Map
使用键,但它们没有保留组合列表中不匹配的元素,例如 keys <- unique(c(names(list1), names(list2))
和 combined_list <- Map(rbind, list1[keys], list2[keys])
.但它们都没有按照我想要的方式为我工作。
基本上我想执行一个 rbind
在两个列表中包含的同名数据集上。这些列表可能具有不同的长度并且具有不同的元素,有时甚至是重叠的元素。
什么 list1
和 list2
看起来像:
a <- data.frame(id = 1:5, type =c("a", "b", "c", "d", "e"))
b <- data.frame(id = 6:10, type =c("f", "g", "h", "i", "j"))
c <- data.frame(id = 11:15, type =c("k", "l", "m", "n", "o"))
list1 <- list(a=a,b=b,c=c)
a <- data.frame(id = 16:20, type =c("p", "q", "r", "s", "t"))
b <- data.frame(id = 21:25, type =c("u", "v", "w", "x", "y"))
e <- data.frame(id = 26:30, type =c("z", "ab", "ac", "ad", "ae"))
f <- data.frame(id = 31:35, type =c("ba", "bb", "bc", "bd", "be"))
list2 <- list(a=a,b=b,e=e, f=f)
预期的结果应该是这样的:
a <- data.frame(id = c(1:5, 16:20), type =c("a", "b", "c", "d", "e", "p", "q", "r", "s", "t"))
b <- data.frame(id = c(6:10,21:25), type =c("f", "g", "h", "i", "j", "u", "v", "w", "x", "y"))
c <- data.frame(id = 11:15, type =c("k", "l", "m", "n", "o"))
e <- data.frame(id = 26:30, type =c("z", "ab", "ac", "ad", "ae"))
f <- data.frame(id = 31:35, type =c("ba", "bb", "bc", "bd", "be"))
combined_list <- list(a=a, b=b, c=c, e=e, f=f)
非常感谢在这方面的任何回应。 附言这是我关于 SO 的第一篇文章。 :)
最佳答案
您可以尝试使用 list1
和 list2
中的 unique
names
,因为您已经尝试过,然后使用他们到 setnames
:
keys <- unique(c(names(list1), names(list2)))
x <- setNames(Map(rbind, list1[keys], list2[keys]), keys)
identical(x, combined_list)
#[1] TRUE
或使用lapply
:
x <- lapply(setNames(keys, keys), function(x) {rbind(list1[[x]], list2[[x]])})
identical(x, combined_list)
#[1] TRUE
关于r - 将数据帧组合在两个不同的列表中,这些列表以 R 中的元素名称为键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64679380/