假设:我想比较所有元素并在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]])
答案 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)