我有两个数据.表XY.

X:area, id, value中的列

创建两个数据.桌子:

X = data.table(area=c('US', 'UK', 'EU'),
               id=c('c001', 'c002', 'c003'),
               value=c(100, 200, 300)
              )

Y = data.table(ID=c('c001', 'c002', 'c003'),
               price=c(500, 200, 400),
               sales=c(20, 30, 15)
              )

我设置了XY的键:

setkey(X, id)
setkey(Y, ID)

现在我试着在X中加入XY,在Y中加入ID:

merge(X, Y)
merge(X, Y, by=c('id', 'ID'))
merge(X, Y, by.x='id', by.y='ID')

All引发错误,表示by参数中的列名无效.

我参考了数据手册.表,并发现merge函数不支持by.xby.y个参数.

我如何连接两个数据.不同列名的表格without changing the column names

Append:

推荐答案

过时的


使用以下操作:

X[Y]
#    area   id value price sales
# 1:   US c001   100   500    20
# 2:   UK c002   200   200    30
# 3:   EU c003   300   400    15

或者这个操作:

Y[X]
#      ID price sales area value
# 1: c001   500    20   US   100
# 2: c002   200    30   UK   200
# 3: c003   400    15   EU   300

Edit在你编辑完你的问题后,我读了FAQ篇文章的第1.12节:"X[Y]和merge(X,Y)之间有什么区别?",这让我找到了?merge checkout 台,我发现有两个不同的合并函数,这取决于您使用的是哪个软件包.默认值为merge.data.frame,但不包括数据.表中使用merge.data.table.比较

merge(X, Y, by.x = "id", by.y = "ID") # which is merge.data.table
# Error in merge.data.table(X, Y, by.x = "id", by.y = "ID") : 
# A non-empty vector of column names for `by` is required.

具有

merge.data.frame(X, Y, by.x = "id", by.y = "ID")
#     id area value price sales
# 1 c001   US   100   500    20
# 2 c002   UK   200   200    30
# 3 c003   EU   300   400    15

Edit for completeness基于@Michael Bernsteiner的commentdata.table团队似乎计划在merge.data.table函数中实现by.xby.y,但尚未实现.

R相关问答推荐

如何计算具有NA的行的更改百分比

以R表示的gglikert地块调整总数

使用Shiny组合和显示复制和粘贴的数据

如果行和列名以相同的开头,将矩阵值设置为0

从多个前置日期中获取最长日期

R创建一个数据透视表,计算多个组的百分比

如何使用rmarkdown和kableExtra删除包含折叠行的表的第一列的名称

如何根据条件计算时差(天)

如何根据组大小应用条件过滤?

用黄土法确定区间

一小时满足条件的日期的 Select

在数组索引上复制矩阵时出错

根据现有列的名称和字符串的存在进行变异以创建多个新列

try 将 colored颜色 编码添加到ggploly的标题中

如何将一列中的值拆分到R中各自的列中

'使用`purrr::pwalk`从嵌套的嵌套框架中的列表列保存ggplots时出现未使用的参数错误

如何在反曲线图中更改X标签

通过R:文件名未正确写入[已解决]将.nc文件转换和导出为.tif文件

如何使用循环从R中的聚合函数创建列,而不会在名称中给出&q;$&q;?

附加中缀操作符