r - 如何合并 data.tables 保持列对映射固定?

标签 r merge data.table

我有两个data.table

>a <- data.table(code=c('FI', 'NO', 'SW'), name=c('Finland', 'Norway', 'Sweden'), category=c('A', 'B', 'C'), val_1=c(1,2,3))

>a
   code    name category val_1
1:   FI Finland        A     1
2:   NO  Norway        B     2
3:   SW  Sweden        C     3

> b <- data.table(code=c('FI', 'NO', 'FI'), category=c('A', 'B', 'C'), val_2=c(4,5,6))
> b
   code category val_2
1:   FI        A     4
2:   NO        B     5
3:   FI        C     6

如果我合并这些data.tables我会得到预期的输出

> merge(a, b, all=T, by=c('code', 'category'))
   code category    name val_1 val_2
1:   FI        A Finland     1     4
2:   FI        C      NA    NA     6
3:   NO        B  Norway     2     5
4:   SW        C  Sweden     3    NA

但是,我正在寻找的输出是

   code category    name val_1 val_2
1:   FI        A Finland     1     4
2:   FI        C Finland    NA     6
3:   NO        B  Norway     2     5
4:   SW        C  Sweden     3    NA

其中国家/地区名称取自a。我怎样才能做到这一点?

最佳答案

我只是剥离代码到名称的映射,并在需要时将其添加回来。

codemap <- a[,name,keyby=code]
a[,name:=NULL]

m <- merge(a,b,all=TRUE,by=c('code','category'))
#    code category val_1 val_2
# 1:   FI        A     1     4
# 2:   FI        C    NA     6
# 3:   NO        B     2     5
# 4:   SW        C     3    NA

setkey(m,NULL)
codemap[m]
#    code    name category val_1 val_2
# 1:   FI Finland        A     1     4
# 2:   FI Finland        C    NA     6
# 3:   NO  Norway        B     2     5
# 4:   SW  Sweden        C     3    NA

关于r - 如何合并 data.tables 保持列对映射固定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31060461/

相关文章:

R ggplot2堆叠条以错误的顺序填充一个条

r - R中的空间最近邻分配

mercurial - 使用 Mercurial merge 一些修订但不 merge 其他修订

r - 将规则字符串解析为 data.frame 的最快方法

r - 计算每个 id 长度为 2 的组合

r - by 和 join 的 data.table 结果没有按我的预期排序,为什么?是为了效率吗?

r - 使用 rnorm() 生成数据集

r - ggplot : Save multiple plots in one pdf with the same plot proportions

svn - 具有多个开发人员的 Matlab Simulink 版本控制

sql - 多表插入与合并?