在data.table(R)中按组高效生成随机变量
我有一个下面的样本数据,我试图通过大量的组来创建随机数,但这花费了太多的时间。我想知道是否有一种有效的方法:在data.table(R)中按组高效生成随机变量,r,data.table,R,Data.table,我有一个下面的样本数据,我试图通过大量的组来创建随机数,但这花费了太多的时间。我想知道是否有一种有效的方法: library(data.table) d <- mtcars n <- 10000 k1<-rbindlist(replicate(n, d, simplify = FALSE)) k1[,factor_var:=rep(seq(1,80000),4)] #sample data #generating random number k1[,rand:=runif(nr
library(data.table)
d <- mtcars
n <- 10000
k1<-rbindlist(replicate(n, d, simplify = FALSE))
k1[,factor_var:=rep(seq(1,80000),4)] #sample data
#generating random number
k1[,rand:=runif(nrow(k1),0,1),factor_var]
库(data.table)
d您可以使用此命令
k1[, rand:=runif(.N, 0, 1), factor_var]
使用nrow很慢,因为R每次都计算行数。您应该事先使用.N或计算nrow,如下所示
nr <- nrow(k1)
k1[, rand:=runif(nr, 0, 1), factor_var]
nr当您试图为每组的4行分配320000个值时,您不太清楚要做什么。为什么你不能只运行一次runif(nrow(k1))
。将数据想象为320000个个体观察(不一定相同)和80000个家庭(平均每户有4个个体)。好吧,那么你想做什么?为什么你认为不一样?当然@Frank。我会的。是的,我想我们已经在评论中确定OP的情况有点复杂。至少他们是这么说的。我认为唯一的问题是表格中的nrow更改为brow
为nrow
。我猜你的意思是nRow,也许如果你使用了rep(seq(180000),each=4)
你会看到它们是一样的。关键是这两个变量是以相同的方式生成的。给定因子_var
的均匀(0,1)的条件分布与均匀(0,1)的无条件分布相同。在比较随机种子生成的结果时,应尝试使用set.seed
。