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

当我使用dat[dat2]合并两个表时,除了我有一些重复的列名之外,其他所有东西都按预期工作。 例如,两个表中都出现一个名为Status的列,合并后, dat2中的列dat2显示为i.Status 与其重命名这些列,不如只是将它们完全从表中删除。 最简单的方法是什么?

#1楼 票数:1

下面的代码说明了我提到的两种情况的方法,尽管可能有一些更高级(更有效)的data.table (版本1.9.6)方法。

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

# 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))

这是不丢失的数据:

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

方法1 :使用intersectmget函数的合并/连接过程中的子集。

# 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"]

方法2 :使用grep合并后删除

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

这两种方法都返回

    id a          b           d          c
 1:  1 a -1.2070657 -0.47719270  0.1340882
 2:  2 b  0.2774292 -0.99838644 -0.4906859
 3:  3 c  1.0844412 -0.77625389 -0.4405479
 4:  4 d -2.3456977  0.06445882  0.4595894
 5:  5 e  0.4291247  0.95949406 -0.6937202
 6:  6 f  0.5060559 -0.11028549 -1.4482049
 7:  7 g -0.5747400 -0.51100951  0.5747557
 8:  8 h -0.5466319 -0.91119542 -1.0236557
 9:  9 i -0.5644520 -0.83717168 -0.0151383
10: 10 j -0.8900378  2.41583518 -0.9359486

  ask by Jeff translate from so

未解决问题?本站智能推荐:

1回复

如何配对然后再合并两个数据表?

我正在data.tables的世界中潜水,到目前为止,我享受语法的乐趣,因为我发现编写更少的代码可以做更多的事情。 但是,有时它有点异国情调。 这是我需要弄清楚的一件事-我知道如何进行连接,例如x [y],但是我需要做的是稍微复杂一点(但仍然非常简单!)。 我们的销售数据库遭受多次
1回复

合并具有两个id变量和NA值的两个数据表

我想合并以下数据表 并且结果应包括每个ID的每一天。 不幸的是,有些ID在几天之内不存在。 我尝试将id和day设置为DT键。 在以下几行中,我实际上并没有获得day 2 day的id因为变量实际上已缺失,并且变量加倍了(var1.x var1.y) allow.ca
2回复

合并两个数据表,如果 dt1 为 NA,则从 dt2 取值

我有两个数据表。 我将它们合并到 4 个公共列中(主键 = col1)。 但是,dt1 中的许多行在 3 个子键(col2、col3、col4)中都有 NA。 合并时,它们保留 NA 而不是从与它们匹配的 dt2 行中获取现有值。 例子: 每当 dt1 具有 NA 时,我如何调整合并以从这 3
1回复

如何基于R中的重叠序列有效地合并两个数据表?

我有两个数据表,例如: 我正在尝试根据它们是否具有重叠序列来合并它们。 例如,所需的输出是: 我可以在for循环中执行此操作。 例如: 但是,这是我要应用到的数据表很大,并且此方法太慢了。 有人对我如何提高绩效有任何建议吗?
3回复

通过引用两列的条件组合R中的两个数据表

我有两个要基于两个列中的值进行合并/联接的数据表,这些值可以在两个数据表中以相反的顺序出现。 这是两个示例数据表: 因此,col1和col2中的值对于两个数据表而言都是相同的,但是分布是不同的。 例如,aa位于dt1的col1中,但位于dt2的col2中。 我想基于对col1和co
2回复

加入两个数据表并仅使用第二个dt中的一列

假设我有两个数据表(dt1和dt2),我想使用数据表获取dt3。 A,B,C,E,F,G,H是列名。 dt1键是列A,dt2键是列E.数据表具有不同的行数。 我想保留DT1中的所有列,并且只将一个列(H)从DT2添加到已连接的数据表中。 最终,我将它存储为DT1(尽管我在下面显示为dt3
1回复

合并 R 中列数不均匀的两个数据表的问题

我在下面初始化了一个数据表,其他数据表是“get_LR”。 我需要合并这两个表,我想要的输出如下所示。 我怎样才能在 R 中的数据表方法中实现这一点。? 谢谢。
4回复

合并多个data.tables

我知道可以使用merge函数或[.data.table函数合并(连接)两个data.table 。 但是,如果我说 10, data.table s 并想使用do.call将它们合并在一起,是否有一个函数可以做到这一点? 目前我求助于do.call(cbind, ...) ,它只适用于非常特殊的情况