【发布时间】:2018-09-20 17:11:46
【问题描述】:
我需要通过两个关键变量 ID 和 DATE 合并两个数据框列表。这是我拥有的数据示例:
names1 <- c("df1", "df2")
mydf1 <- data.frame(ID=c(115477, 115477), DATE=c("2012-01-31","2012-02- 29"), SCORE =c(677,635))
mydf2 <- data.frame(ID=c(22319, 22319), DATE=c("2011-09-30","2011-10-31"), SCORE = c(621,630))
list1 <- list(mydf1,mydf2)
names(list1) <- names1
names2 <- c("df_auto1", "df_auto2")
mydf_auto1 <- data.frame(ID=c(22319, 22319),DATE=c("2011-09-30","2011-10-31") , Fprice =c(8708,8708))
mydf_auto2 <- data.frame(ID=c(115477, 115477), DATE=c("2012-01-31","2012-02-29"), Fprice = c(NA,6543))
list2 <- list(mydf_auto1,mydf_auto2)
names(list2) <- names2
我尝试使用 Map 功能,但我得到的输出搞砸了。这是我尝试做的:
V <-Map(merge, list1, list2,MoreArgs=list(by=c('ID','DATE'), all=TRUE))
for (i in seq_along(V)) {
write.csv(V[[i]], paste0("merge_",i, ".csv"))
}
作为最终输出,我想获得一个 ID = 115477 和完全填充变量(例如 DATE、SCORE 和 Fprice)的数据帧;另一个 ID = 22319 且完全填充的数据框。例如,对于 ID = 115477,我想得到:
ID DATE SCORE Fprice
115477 2012-01-31 677 NA
115477 2012-02-29 635 6543
有人知道我做错了什么吗?感谢您的帮助。
【问题讨论】:
-
你可以试试
merge( do.call(rbind, list1), do.call(rbind, list2), by=c('ID', 'DATE'), all=TRUE ) -
您好 chinsoon12,非常感谢您的建议。您的解决方案是完美的!我虽然对 rbind 感到担忧。我的数据非常庞大。 rbind 命令将所有数据帧组合在一起。无论如何要保留数据框列表吗?
-
我想,我会采用以下解决方案:V