>假设:我想比较所有元素并在Excel工作表中获取最终值。我正在将我的列表元素转换为 data.frame,然后合并它们。当我手动执行此操作时,它工作正常,但是当我尝试在循环中执行时,我无法做到。我想合并列表的所有元素并将它们存储在一个变量 (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]])
我认为您可以在 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)