我有3个列表(dataset1, dataset2, dataset3)
,每个列表包含多个不同的数据帧。但是,在每个列表中,数据帧的顺序是相同的(即列表1中的第一个数据帧,列表2和列表3具有相同的标题,类似地对于第二个,第三个第四个数据帧等)。
我正在考虑创建一个循环,将3个数据帧列表合并为1个数据帧列表。由于每个数据帧在所有列表中的顺序相同,我尝试使用以下代码:
library(purr)
combined_data <- pmap(dataset1,
dataset2,
dataset3,
~rbind(..1,..2,..3))
相反,R返回错误“错误:元素1的长度为51,而不是1或90。”
我做了检查,所有3个数据集中的第一个数据帧都是“51个列表”,而所有3个数据集中的第三个数据帧都是“90个列表”。
但是,当我运行以下代码时:
combined_data <- map2(dataset1,
dataset2,
~rbind(.x,.y))
combined_data <- map2(combined_data,
dataset3,
~rbind(.x,.y))
它的工作方式与我想要的完全一致。因此,当我使用pmap时,我想从错误中学习我的代码是否有任何问题,特别是因为我将来需要经常在多个列表上执行此操作,并且使用map2将不具有可持续性。谢谢大家!
答案 0 :(得分:1)
您可以使用purrr::transpose
切换列表级别。
这样可以将每个列表中的第一个data.frame放入它们自己的列表中,将每个列表中的第二个data.frame放入它自己的列表中,依此类推。
然后,您只需使用purrr::map
和dplyr::bind_rows
加入新列表的data.frames。
library(tidyverse)
transpose(list(dataset1, dataset2, dataset3)) %>%
map(bind_rows)
答案 1 :(得分:0)
我们可以使用
pmap(list(dataset1, dataset2, dataset3), ~ rbind(...) %>%
as.data.frame)