合并两个表时,我无法控制合并结果中的列名。为了解释我的情况,让我使用 mtcars 数据:
#load mtcars data.frame
data(mtcars)
添加一个名为“car”的新列,我将用作合并键
mtcars$car <- row.names(mtcars)
现在创建两个互斥表。
small <- mtcars[mtcars$cyl == 4,]
med.large <- mtcars[mtcars$cyl >4,]
现在,当我进行左合并时,我应该得到“小”表,因为这两个表是互斥的:
merge(x = small, y = med.large, by = 'car', all.x=T)
这将返回“小”表,但每列出现两次,带有 .x 和 .y 扩展名,.y 列全部为 NA(因为这两个表没有公共(public)记录),如下所示
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
在这种情况下,如何使用主合并表中的列值仅获取一次列名 LEFT 表(“小”)。我不知道如何避免 .x 和 .y。延期?
最佳答案
如果每个列名都重复,您可以使用
merge(x = small, y = med.large, by = names(small), all.x=T)
如果列名不同,您可以在两者中构建名称向量
intersect(names(small), names(med.large))
并将其传递给
by
.否则,如果两个 data.frame 共享一个未传递给 by
的列,你最终会得到 .x
或 .y
后缀。
关于r 编程 --- 合并函数返回带有 .x 和 .y 的列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34834257/