首页 > 解决方案 > 合并多个 data.frames [r]

问题描述

有一个l1data.frames列表:

head(lapply(l1,head,n=3),3)
[[1]]
   nu_pregao    pcVar
1       2371 7.224848
45      2372 2.797704
89      2373 3.947368

[[2]]
   nu_pregao    pcVar
2       2371 4.055709
46      2372 2.944882
90      2373 3.507937

[[3]]
   nu_pregao    pcVar
3       2371 4.011461
47      2372 3.679907
91      2373 4.693034

如果一个人Reduce用来合并它们

l2=Reduce(function(x,y) merge(x,y, by='nu_pregao'),l1)
There were 41 warnings (use warnings() to see them)

得到一系列这样的警告:

1: In merge.data.frame(x, y, by = "nu_pregao") :
  column names ‘pcVar.x’, ‘pcVar.y’ are duplicated in the result

结果还可以,唯一的问题是重复的名称。有没有办法避免这种情况?
我已经看到问题如何在 R 中同时合并多个 data.frames 和 sum 和 average 列,但它似乎rbind不是merge.

标签: rdataframemerge

解决方案


像这样的东西怎么样:

l2 <- Reduce(function(x, n) merge(x, l1[[n]], by='nu_pregao', suffixes = c("", n)),
             seq(2, length(l1)), init = l1[[1]])
l2
#>   nu_pregao    pcVar   pcVar2   pcVar3
#> 1      2371 7.224848 4.055709 4.011461
#> 2      2372 2.797704 2.944882 3.679907
#> 3      2373 3.947368 3.507937 4.693034

名称一致性的最后润色:

names(l2)[match("pcVar", names(l2))] <- "pcVar1"
l2
#>   nu_pregao   pcVar1   pcVar2   pcVar3
#> 1      2371 7.224848 4.055709 4.011461
#> 2      2372 2.797704 2.944882 3.679907
#> 3      2373 3.947368 3.507937 4.693034

您的数据:

l1 <- list(read.table(text = "nu_pregao    pcVar
1       2371 7.224848
45      2372 2.797704
89      2373 3.947368", header = TRUE),

read.table(text = "nu_pregao    pcVar
2       2371 4.055709
46      2372 2.944882
90      2373 3.507937", header = TRUE),

read.table(text = "nu_pregao    pcVar
3       2371 4.011461
47      2372 3.679907
91      2373 4.693034", header = TRUE))

推荐阅读