合并多个data.frames[r]
有一个数据帧列表合并多个data.frames[r],r,dataframe,merge,R,Dataframe,Merge,有一个数据帧列表l1: 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
l1
:
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
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
结果正常,唯一的问题是重复的名称。
有没有办法避免这种情况?我见过这个问题,但它似乎是
rbind
而不是merge
这样的东西怎么样:
1: In merge.data.frame(x, y, by = "nu_pregao") :
column names ‘pcVar.x’, ‘pcVar.y’ are duplicated in the result
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
l2 nu_pregao pcVar pcVar 2 pcVar 3
#> 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
名称(l2)[匹配(“pcVar”,名称(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))
l1您可以在合并前更改数据集中pcVar
的名称。您可以更改名称,例如使用:l1