合并两个表时,我无法控制合并结果中的列名.为了解释我的情况,让我使用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.延期?
如果每个列名都重复,则可以使用
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后缀。