在StackOverflow question about rolling sum中,它给出了一个答案,涉及在i
和by=
data.table参数中使用值列表。
当查看包装手册或小插图时,这个功能对我来说似乎并不明显。
为了理解这个功能,我创建了一些带有一些不直观结果的简单代码,我只是试图将不同的索引和组列表传递给函数i
和by
,看看输出是什么由函数j
给出。
library(data.table)
DT1 <- data.table(x = c(1, 2, 3), y = c('a', 'b', 'b'))
DT2 <- data.table(x = c(1, 2, 3, 4) , y = c('a', 'a', 'b', 'c'))
DT1[, idx := .I]
DT2[, idx := .I]
DT1[DT2$x, idx, by = DT2$y]
DT2 idx
1: a 1
2: a 2
3: b 3
4: c 0
DT1[DT2$x, x, by = DT2$y]
DT2 x
1: a 1.000000e+00
2: a 2.000000e+00
3: b 3.000000e+00
4: c 1.919019e-316
DT1[DT2$idx, x, by = DT2$y]
DT2 x
1: a 1.000000e+00
2: a 2.000000e+00
3: b 3.000000e+00
4: c 1.919019e-316
有人可以解释这个功能吗?为什么这个简单的例子会给出虚假的结果?
我期待这段代码返回错误,因为我正在传递DT2中不在DT1中的组和索引。