我想进行多次合并:我需要将38个文件与一个文件合并,从而生成38个合并文件。 by.y
和by.x
变量都会根据我想要进行的每个合并而变化。为了尝试在一个循环中进行所有这些合并,我创建了三个变量列表:(i)一个告诉我将用于循环的文件的名称是什么; (ii)一个具有by.x
变量的名称,(iii)一个具有by.y
部分变量的名称。
请使用3个数据框而不是38个数据框查看我的问题的简化示例:
(i) list_fam: c('f1990', 'f1991', 'f1992') #files to merge;
(ii) identifier_fam: c('f1','f2','f3') #by.x variables
(iii) identifier_ind: c('V1990','V1991','V1993') #by.y variables
(iv) ind: file to merge the list_fam
试图循环1:
for (i in list_fam){
for (j in identifier_fam){
for (k in identifier_ind){
x<-paste("z",i,sep="")
x<-merge( i, ind, by.x = j , by.y = k)
}
}
}
试探循环2:
for (i in list_fam){
for (j in identifier_fam){
for (k in identifier_ind){
x<-paste("z",i,sep="")
assign(x, merge( i, ind, by.x = j , by.y = k))
}
}
}
在这两种情况下,我收到错误:
Error in fix.by(by.x, x) : 'by' must specify a uniquely valid column.
我可能编码错误的任何线索?
答案 0 :(得分:3)
如评论?Map
中所述,您正在寻找:
Map(merge, mget(list_fam), list(ind),by.x=identifier_fam,by.y=identifier_ind)
可重复的示例
set.seed(1116)
f1990 <- data.frame(f1 = sample(letters,10), col90=1:10)
f1991 <- data.frame(f2 = sample(state.abb,10), col91=1:10)
f1992 <- data.frame(f3 = sample(month.abb,10), col92=1:10)
ind <- data.frame(V1990=sample(letters,10),
V1991=sample(state.abb,10),
V1992=sample(month.abb, 10))
identifier_fam <- c('f1','f2','f3') #by.x variables
identifier_ind <- c('V1990','V1991','V1992') #by.y variables
Map(merge, mget(ls(pattern="f\\d{4}")), list(ind), by.x=identifier_fam, by.y=identifier_ind)
# $f1990
# f1 col90 V1991 V1992
# 1 e 4 ND Jul
# 2 g 2 OH Nov
# 3 p 7 IA May
# 4 s 6 SC Sep
#
# $f1991
# f2 col91 V1990 V1992
# 1 MS 6 a Feb
# 2 VT 8 o Oct
#
# $f1992
# f3 col92 V1990 V1991
# 1 Apr 8 v OK
# 2 Aug 3 z FL
# 3 Feb 10 a MS
# 4 Jul 4 e ND
# 5 Jun 2 i MN
# 6 May 5 p IA
# 7 Nov 7 g OH
# 8 Oct 1 o VT
# 9 Sep 6 s SC