Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在data.table(R)中按组高效生成随机变量_R_Data.table - Fatal编程技术网

在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