在data.table中按行和组rbinom(或else)

在data.table中按行和组rbinom(或else),r,data.table,R,Data.table,我想为data.table中g组中的每一行绘制Y。要进行说明,请进行以下简单模拟: set.seed(123) N = 50 g = 3 DT = data.table(id = rep(1:N,g), group_id = sort(rep(1:g, N)), p = runif(150, min = 0, max = 1) ) DT[, Y := rbinom(n = .N, size =

我想为data.table中g组中的每一行绘制Y。要进行说明,请进行以下简单模拟:

set.seed(123)

N = 50
g = 3

DT = data.table(id = rep(1:N,g),
                group_id = sort(rep(1:g, N)),
                p = runif(150, min = 0, max = 1)
                )

DT[, Y := rbinom(n = .N, size = 1, prob = p), by = group_id]  

DTs = split(DT, by = "group_id")

DTs = rbindlist(DTs[1], idcol=T)

DTs[, Y := rbinom(n = .N, size = 1, prob = p)]

head(DT)
head(DTs)

为什么DT和DTs的Y不同?我认为这是等效的

> head(DT)
   id group_id         p Y
1:  1        1 0.2875775 1
2:  2        1 0.7883051 1
3:  3        1 0.4089769 0
4:  4        1 0.8830174 1
5:  5        1 0.9404673 1
6:  6        1 0.0455565 0


> head(DTs)
   .id id group_id         p Y
1:   1  1        1 0.2875775 1
2:   1  2        1 0.7883051 1
3:   1  3        1 0.4089769 1
4:   1  4        1 0.8830174 1
5:   1  5        1 0.9404673 1
6:   1  6        1 0.0455565 0


每次执行随机抽取时,随机数生成器都会被洗牌,因此在第二次二项抽取时处于不同的状态。如果要进行相同的绘制,则需要确保在绘制之前设置种子:

set.seed(123)
N=50
g=3
DT=数据表(id=代表(1:N,g),
组id=排序(rep(1:g,N)),
p=runif(150,最小值=0,最大值=1)#RNG改变状态
)
#为二项式绘制指定种子
种子集(456)
DT[,Y:=rbinom(n=0.n,size=1,prob=p),by=group#u id]#RNG改变状态
DTs=拆分(DT,by=“group_id”)
DTs=rbindlist(DTs[1],idcol=T)
#如果我们想要相同的绘图,我们需要将种子设置为相同的状态
种子集(456)
DTs[,Y:=rbinom(n=0.n,size=1,prob=p)]
给你

head(DT)
#>id组\u id p Y
#> 1:  1        1 0.2875775 0
#> 2:  2        1 0.7883051 1
#> 3:  3        1 0.4089769 1
#> 4:  4        1 0.8830174 1
#> 5:  5        1 0.9404673 1
#> 6:  6        1 0.0455565 0
总目(DTs)
#>.id组\u id p Y
#> 1:   1  1        1 0.2875775 0
#> 2:   1  2        1 0.7883051 1
#> 3:   1  3        1 0.4089769 1
#> 4:   1  4        1 0.8830174 1
#> 5:   1  5        1 0.9404673 1
#> 6:   1  6        1 0.0455565 0

使用
DTs[,Y:=rbinom(n=.n,size=1,prob=p)]
您再次重新计算
Y
!嗯,等一下,我会修好的。输入代码太快了。问题依然存在