【发布时间】:2018-06-02 17:48:00
【问题描述】:
我有两个数据集,我想要的可能被松散地称为“非键变量的外部连接”。
这里是数据集
数据集 1
oc oc2 state_id r_state
A011 A01 1808 1.00
A011 A01 1810 0.50
A012 A01 1810 0.50
A011 A01 1814 0.33
A012 A01 1814 0.33
A013 A01 1814 0.33
数据集 2
oc r_country
A011 0.62
A012 0.14
A013 0.24
我想要的输出如下:
oc oc2 state_id r_state r_country
A011 A01 1808 1.00 0.62
A012 A01 1808 NA 0.14
A013 A01 1808 NA 0.24
A011 A01 1810 0.50 0.62
A012 A01 1810 0.50 0.14
A013 A01 1810 NA 0.24
A011 A01 1814 0.33 0.62
A012 A01 1814 0.33 0.62
A013 A01 1814 0.33 0.24
请注意第 2、3 和 6 行是如何“人为地”引入的。我的问题是如何在 R 中执行此操作。如果我通过 oc 合并,merge 函数将不会创建这些行。如果我通过oc2 合并,它将创建不必要的额外行。请注意,oc2 只是oc 的更高级别编码。下面是几行代码,用于在 data.tables 中获取上述数据集。请注意,这些是样本数据集,实际数据包含大约 50 个不同的 oc2,每个 oc2 可以包含 1 到 9 个 oc。此外,还有 47 个不同的州。
DT1 = data.table(oc = c('A011','A011','A012','A011','A012','A013'),
oc2 = rep('A01',6),
state_id = c(1808,1810,1810,1814,1814,1814),
r_state = c(1, 0.5,0.5,0.33,0.33,0.33)
)
DT2 = data.table(oc = c('A011','A012','A013'),
r_country = c(0.62, 0.14, 0.24)
)
虽然我使用data.table,但基本data.frame 解决方案也可以。
【问题讨论】:
标签: r merge data.table outer-join