R:为什么更改一个基表的键会导致新连接表中的列独立排序?

时间:2014-11-07 17:54:54

标签: r data.table

编辑:问题似乎是由于我使用的R和data.table版本中的错误。感谢@Arun指出它。

我在使用R中的数据表时遇到问题,在连接两个data.tables(使用语法setkey(DT,x))之后直接调用X[Y]会导致新连接表的列独立出现彼此之间,导致价值彼此分离。请注意,如果我在调用setkey之前对新连接的表执行操作,则不会发生这种情况。

我有data.table abdata.table bc

> ab
    a  b
1:  1  A
2:  2  B
3:  3  C
4:  4  D
5:  5  E
6:  6  F
7:  1  G

> bc
    b  c
1:  A  101
2:  B  102
3:  C  103
4:  D  104
5:  E  105
6:  F  106
7:  G  101

在分配键后加入两个键会得到预期的结果:

> setkey(ab, b)
> setkey(bc, b)
> comb <- ab[bc]
> comb
    b  a  c
1:  A  1  101
2:  B  2  102
3:  C  3  103
4:  D  4  104
5:  E  5  105
6:  F  6  106
7:  G  7  101

但是当我致电setkeybc的密钥更改为c时,comb中的值会发生变化,就像列b和{ {1}}的排序与列c无关:

a

为什么调用> setkey(bc, c) > comb b a c 1: A 1 101 2: G 2 101 3: B 3 102 4: C 4 103 5: D 5 104 6: E 6 105 7: F 1 106 会导致通过将setkey(DT,x)加入另一个表而创建的新data.table中的列导致新表中的列独立于其他列?

这是我的DT

sessionInfo()

1 个答案:

答案 0 :(得分:1)

上述行为是由于R(3.1.1)和data.table(1.9.2)版本中的错误造成的。将R更新到版本3.1.2并将data.table更新到1.9.4解决了问题,并且行为符合预期。

感谢@Arun建议我更新。