我正在使用R for NONMEM创建模拟数据。
我想知道如何为34个样本创建3个样本时间的随机集。
下面是我的代码:
nsubjects <- 34
times <- rep((c(runif(1, 0.5, 1), runif(1, 12, 48), runif(1, 47, 49))), nsubjects)
现在,唯一的问题是这组三个一组的样本没有个体间的变异性,在真实的世界中,并不是每个人的每个样本都是在完全相同的时间采集的,这就是为什么我使用runif命令来设置条件,第一个样本必须在0.5-1小时之间采集,第二个样本必须在12-48小时之间采集,第三个样本必须在47-49小时之间采集。
我不在乎这些数据是否在数组中,它们只需要位于一个向量中(所以没有矩阵,我不想要三个采样时间列,因为我将数据附加到ID中。
每组3个样本必须在其预期运行的参数范围内(最小值-最大值),应有3 * 34个样本,每个样本都有其自己的预期随机值。
2条答案
按热度按时间hfwmuf9z1#
R的伪RNG是矢量化的,定义了下限和上限,一个对
runif
的调用就可以完成这项工作。在下面的代码中,我将矢量化的结果与Ric的注解中的结果进行了比较。
创建于2023-04-06带有reprex v2.0.2
你也可以用
length(lo)
(或hi
)替换runif
调用中的常量3
:由于您需要的是向量,而不是矩阵,假定R的矩阵是列一阶的,只需将上面的结果强制为向量
c()
或直接
完整的代码是
创建于2023-04-06带有reprex v2.0.2
编辑
这里有一个避免
merge
的解决方案。创建一个临时列count
,其中包含所需的ID重复次数。uncount
该列的数据。运行上面的c(replicate(etc))
代码来创建新列。末尾的结果显示指定范围内的数字。
创建于2023-04-06使用reprex v2.0.2
ih99xse12#
请注意,
runif
是矢量化的。只需执行以下操作:这个向量的头是: