r - 将数据帧组合在两个不同的列表中,这些列表以 R 中的元素名称为键

标签 r list merge concat

我有两个列表 list1list2每个都包含由其名称唯一标识的数据框或数据表。我想合并 list1list2键入数据集的名称。我希望两个列表的元素都出现在组合列表中。我已经尝试了很多来自 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在两个列表中包含的同名数据集上。这些列表可能具有不同的长度并且具有不同的元素,有时甚至是重叠的元素。

什么 list1list2看起来像:

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 的第一篇文章。 :)

最佳答案

您可以尝试使用 list1list2 中的 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/

相关文章:

python - 将字符串列表提供给 sql 查询 [Python]

ios - merge 2 个分支时 Xcode 6.0.1 崩溃

r - ggplot : change colors for segments 中的两行

r - 使用 dplyr 计算 group_by 中的子组

Python - 查找列表中第一个空项的索引

c++ - 如何有效地访问 C++ 中的列表信息?

r - 在 R 中聚合时创建虚拟变量

r - 结果中的一个或多个因子水平没有数据 : ''

mercurial - Mercurial 中是否有一个工作流程可以让许多人一起进行 merge (集成)?

mysql - 仅当数据自上次记录以来按日期发生更改时才向表中添加记录