为什么data.table`:=`在与`sample`一起使用时不起作用?

时间:2015-04-02 15:00:05

标签: r data.table

在尝试从数据表中的组中随机抽取样本时,我尝试使用带有sample(c(1, rep(0, .N-1)))的虚拟列,但是当我执行此操作时,data.table中的某些内容似乎非常错误

示例

> library(data.table)
> set.seed(151)
> DT = data.table(L = rep(c("A","B", "C"), 4), X = rnorm(12), i = 1:12)
> DT[, S := sample(c(1, rep(0, .N-1))), by = L]
> DT[S==1]
   L          X i S
1: C -0.1467396 3 1
2: A -1.3974781 7 1
3: B -1.0188383 8 1
> 
> DT[, S := sample(c(2, rep(0, .N-1))), by = L]
> DT[S==2]
   L          X  i S
1: A  0.6721730 10 2
2: B -0.4845518 11 0
3: C  0.5606090 12 2
> 
> DT[, S := sample(c(3, rep(0, .N-1))), by = L]
> DT[S==3]
   L          X  i S
1: B -0.4845518 11 3
2: C  0.5606090 12 3
> 
> DT
    L           X  i S
 1: A -0.05153895  1 0
 2: B  0.76573738  2 0
 3: C -0.14673959  3 0
 4: A -0.11318581  4 3
 5: B -0.39551140  5 0
 6: C  0.78227595  6 0
 7: A -1.39747811  7 0
 8: B -1.01883832  8 0
 9: C  0.22947586  9 0
10: A  0.67217297 10 0
11: B -0.48455178 11 3
12: C  0.56060896 12 3
> 

正如您所看到的,不仅每次尝试都没有插入正确数量的1,而且DT[S==1]不再正常运行,不知何故返回S不为1的行。

这里发生了什么?

值得注意的是,第一次调用它似乎工作正常 - 所以这表明在现有列的顶部分配组时会发生奇怪的事情。

0 个答案:

没有答案