r programming --- merge函数返回带.x和.y的列名

sea*_*eak 7 r

合并两个表时,我无法控制合并结果中的列名.为了解释我的情况,让我使用mtcars数据:

#load mtcars data.frame
data(mtcars)
Run Code Online (Sandbox Code Playgroud)

添加一个名为'car'的新列,我将用作合并键

mtcars$car <- row.names(mtcars)
Run Code Online (Sandbox Code Playgroud)

现在创建两个互斥的表.

small <- mtcars[mtcars$cyl == 4,]
med.large <- mtcars[mtcars$cyl >4,]
Run Code Online (Sandbox Code Playgroud)

现在当我进行左合并时,我应该得到'小'表,因为这两个表是互斥的:

merge(x = small, y = med.large, by = 'car', all.x=T)
Run Code Online (Sandbox Code Playgroud)

这会返回"小"表,但是每列都会出现两次.x和.y扩展名.y列所有NA(因为这两个表没有共同的记录),看起来如下所示

 car mpg.x cyl.x disp.x hp.x drat.x  wt.x qsec.x vs.x am.x gear.x carb.x mpg.y cyl.y

 1      Datsun 710  22.8     4  108.0   93   3.85 2.320  18.61    1    1       4      1    NA    NA
Run Code Online (Sandbox Code Playgroud)

如何使用主合并表中的列值只获取一次列名称,在本例中为LEFT表('small').我不知道如何避免使用.x和.y.延期?

ali*_*ire 6

如果每个列名都重复,则可以使用

merge(x = small, y = med.large, by = names(small), all.x=T)
Run Code Online (Sandbox Code Playgroud)

如果列名不同,则可以使用

intersect(names(small), names(med.large))
Run Code Online (Sandbox Code Playgroud)

并将其传递给by。否则,如果两个data.frame共享未传递给的列,则by您将带有.x.y后缀。