R 如何';加入';数据帧是否在集合中找到编号?

R 如何';加入';数据帧是否在集合中找到编号?,r,R,因此,对于我目前正在进行的一个项目,我有一个数字的数据框架(称之为a)。data.frame A由1个变量和300000行不同的数字组成 除了A之外,我还有data.frame B和C。data frame B和C都有315个变量,并且共享相同的结构(数据类型相同,但值/变量名不同) A、 B和C都共享相同的第一个变量,这是它们的主键。A包含整个数字列表,B和C都包含此列表的子集 我想做的是,将B和C中第一个变量中的数字与A中的数字匹配,如果它们匹配,那么B和C中所属行的所有数据都应该放入A中

因此,对于我目前正在进行的一个项目,我有一个数字的数据框架(称之为a)。data.frame A由1个变量和300000行不同的数字组成

除了A之外,我还有data.frame B和C。data frame B和C都有315个变量,并且共享相同的结构(数据类型相同,但值/变量名不同)

A、 B和C都共享相同的第一个变量,这是它们的主键。A包含整个数字列表,B和C都包含此列表的子集

我想做的是,将B和C中第一个变量中的数字与A中的数字匹配,如果它们匹配,那么B和C中所属行的所有数据都应该放入A中

在SQL中,我知道可以根据匹配的结果更新表并添加行。但是,我不允许在这个任务中使用任何SQL命令(因此我不能使用sqldf库),我也不知道如何在R中这样做

例如,假设您有以下带有信息的数据帧:

A

B

C

这将导致:

A


我们可以使用嵌套的
merge

merge(merge(A, B, by.x = "KEY", by.y = "B_KEY", all.x = TRUE), C,  
    by.x = "KEY", by.y = "C_KEY", all.x = TRUE)
但是,如果我们在所有数据帧中保持“KEY”列的列名相同,则使用
Reduce

names(B)[1] <- "KEY"
names(C)[1] <- "KEY"
Reduce(function(x, y) merge(x, y, all.x = TRUE), list(A, B, C))

# KEY VAR_B_2 VAR_B_3 VAR_C_2 VAR_C_3
#1   1    <NA>      NA    <NA>      NA
#2   2      AB     134      BD     250
#3   3    <NA>      NA      BE     251
#4   4      AC     135    <NA>      NA
#5   5    <NA>      NA      BF     252
#6   6    <NA>      NA    <NA>      NA
#7   7      AD     136      BG     253

names(B)[1]对无法使用
sqldf
感到恼火。
C_KEY  VAR_C_2   VAR_C_3
2     BD        250
3     BE        251
5     BF        252
7     BG        253
KEY  VAR_B_2   VAR_B_3  VAR_C_2   VAR_C_3
1       
2      AB       134       BD        250
3                         BE        251   
4      AC       135
5                         BF        252
6
7      AD       136       BG        253
merge(merge(A, B, by.x = "KEY", by.y = "B_KEY", all.x = TRUE), C,  
    by.x = "KEY", by.y = "C_KEY", all.x = TRUE)
names(B)[1] <- "KEY"
names(C)[1] <- "KEY"
Reduce(function(x, y) merge(x, y, all.x = TRUE), list(A, B, C))

# KEY VAR_B_2 VAR_B_3 VAR_C_2 VAR_C_3
#1   1    <NA>      NA    <NA>      NA
#2   2      AB     134      BD     250
#3   3    <NA>      NA      BE     251
#4   4      AC     135    <NA>      NA
#5   5    <NA>      NA      BF     252
#6   6    <NA>      NA    <NA>      NA
#7   7      AD     136      BG     253