r - 如何递归合并列表列表的相应元素

标签 r

例子

a
[[1]]
[[1]]$`1`
    ID     Values
1   4     160.08858
2   8     83.35774
3   30    51.21873
4   38    54.92554
5   44    77.06082

[[1]]$`2`
    ID     Values
1   4     0.08858
2   8     183.35774

[[2]]
[[2]]$`1`
    ID     Values
3   30    51.21873
4   38    54.92554
5   44    77.06082

[[2]]$`2`
    ID     Values
1   4     0.08858
2   8     183.35774
3   30    51.21873
5   44    77.06082

[[3]]
[[3]]$`1`
    ID     Values
5   44    77.06082

[[3]]$`2`
    ID     Values
1   4     0.08858
3   30    51.21873

我想要一个列表,其中第一个元素相同,但第一个列表的第二个元素与第一个元素 1 的列表合并,第二个与第二个元素合并,同样对于列表的第三个元素,第一个数据框应该与列表前面元素的前两个数据框合并,第二个与相应的后两个元素合并。

结果应该是

RESULT
[[1]]
[[1]]$`1`
    ID     Values
1   4     160.08858
2   8     83.35774
3   30    51.21873
4   38    54.92554
5   44    77.06082

[[1]]$`2`
    ID     Values
1   4     0.08858
2   8     183.35774

[[2]]
[[2]]$`1`
    ID     Values
3   30    51.21873
4   38    54.92554
5   44    77.06082
1   4     160.08858
2   8     83.35774
3   30    51.21873
4   38    54.92554
5   44    77.06082


[[2]]$`2`
    ID     Values
1   4     0.08858
2   8     183.35774
3   30    51.21873
5   44    77.06082
1   4     0.08858
2   8     183.35774


[[3]]
[[3]]$`1`
    ID     Values
5   44    77.06082
3   30    51.21873
4   38    54.92554
5   44    77.06082
1   4     160.08858
2   8     83.35774
3   30    51.21873
4   38    54.92554
5   44    77.06082


[[3]]$`2`
    ID     Values
1   4     0.08858
3   30    51.21873
1   4     0.08858
2   8     183.35774
3   30    51.21873
5   44    77.06082
1   4     0.08858
2   8     183.35774

最佳答案

这应该可以解决问题。 (我没有粘贴输出,因为它太庞大了,而且很容易在您自己的控制台上重现。)

# Create some analogous data
df <- data.frame(ID=LETTERS[1:6], Values=5*(1:6), stringsAsFactors=FALSE)
DL <- list(list(`1`=df[1,], `2`=df[2,]),
           list(`1`=df[3,], `2`=df[4,]),
           list(`1`=df[5,], `2`=df[6,]))

# Build a function that does what you want for a pair of inputs
myrbind <- function(x, y) {
    mapply(rbind, y, x, SIMPLIFY=FALSE)
}
myrbind(DL[[1]], DL[[2]]) # Try it out

# Use Reduce to make the merges accumulate as it works through the list.
Reduce(f = myrbind, x = DL, accumulate = TRUE)

关于r - 如何递归合并列表列表的相应元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10741415/

相关文章:

r - R、超正方体和预处理图像中的 OCR 表

r - 将单独的月份和年份列合并到 ggplot2 中的图表

R:依次将函数应用于数据帧并将结果结转到下一次计算

r - 为线图的特定段选择颜色的优雅方法?

R控制每行数据帧的连续NA值的数量

postgresql - 将 GNU R 连接到 PostgreSQL

r - 左对齐森林图包中的森林图()中的文本

R Markdown/rmarkdown 中的回归表 (html/pdf)

r - 如何在R中正确读取剪贴板中的中文?

r - 使用 selectInput 从 R Shiny 中的数据下载多个变量时出现问题