r data.table(<;=1.9.4)连接行为
一段时间后,我又回到了使用r和data.table,但我仍然对连接有问题。我以前问过,结果得到了令人满意的解释,但我仍然没有真正理解其中的逻辑。 让我们考虑几个例子:r data.table(<;=1.9.4)连接行为,r,join,data.table,R,Join,Data.table,一段时间后,我又回到了使用r和data.table,但我仍然对连接有问题。我以前问过,结果得到了令人满意的解释,但我仍然没有真正理解其中的逻辑。 让我们考虑几个例子: library("data.table") X <- data.table(chiave=c("a", "a", "a", "b", "b"),valore1=1:5) Y <- data.table(chiave=c("a", "b", "c", "d"),valore2=1:4) X chiave valor
library("data.table")
X <- data.table(chiave=c("a", "a", "a", "b", "b"),valore1=1:5)
Y <- data.table(chiave=c("a", "b", "c", "d"),valore2=1:4)
X
chiave valore1
1: a 1
2: a 2
3: a 3
4: b 4
5: b 5
Y
chiave valore2
1: a 1
2: b 2
3: c 3
4: d 4
因此:
请注意,X
有重复的键,i
没有。如果我将Y
更改为:
Y <- data.table(chiave=c("b", "c", "d"),valore2=1:3)
Y
chiave valore2
1: b 1
2: c 2
3: d 3
另一方面:
X <- data.table(chiave=c("a", "a", "a", "a", "a", "a", "b", "b"),valore1=1:8)
Y <- data.table(chiave=c("b", "b", "d"),valore2=1:3)
X
chiave valore1
1: a 1
2: a 2
3: a 3
4: a 4
5: a 5
6: a 6
7: b 7
8: b 8
Y
chiave valore2
1: b 1
2: b 2
3: d 3
从我的观点来看,当且仅当我在X和I中都有多个键时(不仅当结果表的行数超过
max(nrow(X),nrow(I)
)时),我需要得到警告,并且只有在这种情况下,我才看到需要allow.cartesian
(所以在我的前两个示例中不是这样)。为了回答这个问题,在当前的开发版本v1.9.5
中,已修复了带有allow.cartesian
的这种行为,并将很快作为v1.9.6
在CRAN上提供。奇数版本是devel,甚至是稳定的。发件人:
allow.cartesian
在连接过程中被忽略,当:
没有重复项,并且i
。关闭。感谢@nigmastar的报道李>mult=“all”
- 通过引用赋值,即
具有j
。关闭。感谢@matthieugomez的报道:=
不连接期间),允许.cartesian
可以安全地忽略
您使用的是哪个版本的
data.table
?它似乎适用于1.9.5。我正在使用1.9.4。不是它不起作用,而是我觉得它的行为方式很奇怪。我的示例是否在v中得到不同的错误消息。1.9.5?设置键(X,交叉键)无错误信息;X[Y]。绝对正确。已在v1.9.5
中修复。检查。注:请从您的帖子中删除
,以便于复制/粘贴。@Arun在哪里可以找到中的v.1.9.5我可以看到v.1.9.4
Y <- data.table(chiave=c("b", "c", "d"),valore2=1:3)
Y
chiave valore2
1: b 1
2: c 2
3: d 3
X[Y]
chiave valore1 valore2
1: b 4 1
2: b 5 1
3: c NA 2
4: d NA 3
X <- data.table(chiave=c("a", "a", "a", "a", "a", "a", "b", "b"),valore1=1:8)
Y <- data.table(chiave=c("b", "b", "d"),valore2=1:3)
X
chiave valore1
1: a 1
2: a 2
3: a 3
4: a 4
5: a 5
6: a 6
7: b 7
8: b 8
Y
chiave valore2
1: b 1
2: b 2
3: d 3
setkey(X,chiave)
X[Y]
chiave valore1 valore2
1: b 7 1
2: b 8 1
3: b 7 2
4: b 8 2
5: d NA 3