假设我有两个data.table:
A:
A B
1: 1 12
2: 2 13
3: 3 14
4: 4 15
Run Code Online (Sandbox Code Playgroud)
B:
A B
1: 2 13
2: 3 14
Run Code Online (Sandbox Code Playgroud)
我有以下代码:
merge_test = merge(dataA, dataB, by="A", all.data=TRUE)
Run Code Online (Sandbox Code Playgroud)
我明白了:
A B.x B.y
1: 2 13 13
2: 3 14 14
Run Code Online (Sandbox Code Playgroud)
但是,我想在最终合并表中的dataA中的所有行.有没有办法做到这一点?
编辑使其更清洁.假设我有两个数据表(dt1和dt2),我想使用数据表获取dt3.A,B,C,E,F,G,H是列名.dt1键是列A,dt2键是列E.数据表具有不同的行数.我想保留DT1中的所有列,并且只将一个列(H)从DT2添加到已连接的数据表中.最终,我将它存储为DT1(虽然我在下面显示为dt3).
如何使用数据表实现它?我有一个丑陋的解决方案与合并+数据框架.
dt1
A B C
1 4 7
2 5 8
3 6 9
2 20 21
dt2
E F G H
1 10 13 16
3 12 15 18
2 11 14 17
dt3
A B C H
1 4 7 16
2 5 8 17
3 6 9 18
2 20 21 17
Run Code Online (Sandbox Code Playgroud) 我想data.table通过引用将两个合并在一起,而不必写下我要合并的所有变量。这是一个了解我的需求的简单示例:
set.seed(20170711)
(a <- data.table(v_key=seq(1, 5), key="v_key"))
# v_key
#1: 1
#2: 2
#3: 3
#4: 4
#5: 5
a_backup <- copy(a)
(b <- data.table(v_key=seq(1, 5), v1=runif(5), v2=runif(5), v3=runif(5), key="v_key"))
# v_key v1 v2 v3
#1: 1 0.141804303 0.1311052 0.354798849
#2: 2 0.425955903 0.3635612 0.950234261
#3: 3 0.001070379 0.4615936 0.359660693
#4: 4 0.453054854 0.5768500 0.008470552
#5: 5 0.951767837 0.1649903 0.565894298
Run Code Online (Sandbox Code Playgroud)
我想在不指定列名的情况下将每个列复制b到a引用中。
我可以执行以下操作,但这会无缘无故地复制对象,从而降低程序性能并增加所需的RAM:
(a <- a[b])
# v_key v1 v2 v3
#1: 1 0.141804303 0.1311052 …Run Code Online (Sandbox Code Playgroud)