如何将列表的每个元素合并到R中的其他元素

时间:2018-04-12 10:19:58

标签: r list merge compare

假设:我想比较所有元素并在Excel工作表中获取最终值。我将列表元素转换为data.frames然后合并它们。当我手动操作时它工作正常,但是当我尝试循环时,我无法做到这一点。我想合并列表中的所有元素并将它们存储在一个变量(mer3)中,该变量可以导出到Excel工作表中

list1 = list("abc","def","ghi","jkl")

[...
extra code to convert every list element into data.frame
df_abc
df_def
df_ghi
df_jkl
]

mer1 <- merge(df_abc,df_def, all = TRUE)
mer2 <- merge(mer1,df_ghi, all = TRUE)
mer3 <- merge(mer2,df_jkl, all = TRUE)

write.xlsx(mer3, file="mydata.xlsx",sheetName="merged data list")

示例数据:(根据以下建议,但在循环中执行合并命令后显示为null)

> DF_list1
[[1]]
  webId  name
1 UA-4  Auth
2 UA-4  Cat
3 UA-4  Sub Cat
[[2]]
  webId  name
1 UA-6  Auth
2 UA-6  Visit
3 UA-6  Sub Cat
[[3]]
  webId  name
1 UA-7  Session
2 UA-7  Cat
3 UA-7  Sub Cat

merged <- DF_list1[[1]] 
for (m in 2:length(DF_list1))
merged <- merge(merged, DF_list1[[m]])

1 个答案:

答案 0 :(得分:0)

我认为你可以在这样的for循环中执行此操作:

merged <- merge(list1[[1]],list1[[2]])
for(i in 3:length(allframes)) {
  merged <- merge(merged,list1[[i]])
}

但如果数据帧的列相同,则可以绑定它们:

来自R文档的

  

do.call构造并执行来自名称或的函数调用   函数和要传递给它的参数列表。

所以你可以将一个数据帧列表传递给函数rbind来合并它们:(如果list1是一个数据帧列表)

result <- do.call(rbind,list1)