合并两个数据表但避免重复列

时间:2016-06-29 16:25:09

标签: r merge data.table

我有两个数据表,datdat2。两个表中都有一些列,但每个列中的值不一定相同。

当我使用dat[dat2]合并两个表时,一切都按预期工作,除了我有一些重复的列名。例如,两个表中都会显示名为Status的列,合并后,dat2中的列显示为i.Status。我不想重命名这些列,而只想将它们从表中删除。最简单的方法是什么?

1 个答案:

答案 0 :(得分:1)

下面是一些代码来说明我提到的两个场景的方法,尽管可能有一些更高级(更高效)的var hexValue = parseInt(substring, 2).toString(16); if(hexValue.length == 1) hexValue = '0'+hexValue (版本1.9.6)方法。

这两种方法都会动态适应变量重叠,因此您不必担心手动输入名称。

data.table

这里的数据没有丢失:

# get some data
set.seed(1234)
dt <- data.table(id=1:10, a=letters[1:10], b=rnorm(10), d=rnorm(10))
dt2 <- data.table(id=1:10, a=letters[5:14], c=rnorm(10), d=rnorm(10))

方法1 :使用dt[dt2, on="id"] id a b d i.a c i.d 1: 1 a -1.2070657 -0.47719270 e 0.1340882 1.1022975 2: 2 b 0.2774292 -0.99838644 f -0.4906859 -0.4755931 3: 3 c 1.0844412 -0.77625389 g -0.4405479 -0.7094400 4: 4 d -2.3456977 0.06445882 h 0.4595894 -0.5012581 5: 5 e 0.4291247 0.95949406 i -0.6937202 -1.6290935 6: 6 f 0.5060559 -0.11028549 j -1.4482049 -1.1676193 7: 7 g -0.5747400 -0.51100951 k 0.5747557 -2.1800396 8: 8 h -0.5466319 -0.91119542 l -1.0236557 -1.3409932 9: 9 i -0.5644520 -0.83717168 m -0.0151383 -0.2942939 10: 10 j -0.8900378 2.41583518 n -0.9359486 -0.4658975 intersect函数进行合并/加入期间的子集。

mget

方法2 :使用# assuming your id variable is the first column in both sets: dropVars <- intersect(names(dt), names(dt2))[-1] dt[dt2[, mget(names(dt2)[-which(names(dt2) %in% dropVars)])], on="id"]

合并后删除
grep

这两种方法都返回

dt3 <- dt[dt2, on="id"]
dt3[, grep("^i\\.", names(dt3), value=TRUE) := NULL]
相关问题