You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用tidyr替代dmutate包mutate_random创建PKPD采样数据集的方法问询

替代方案

你当前使用的mutate_random的场景为独立从data_pkpd的各参数列有放回采样生成个体参数表,直接用tidyverse体系下的dplyr+tidyr即可实现,不需要依赖dmutate包。

方案1:和原逻辑完全对齐的逐列写法

该写法与你原有代码逻辑100%一致,采样结果的统计特性完全相同,仅替换了依赖包的函数:

library(tidyverse)
NSIM <- 100

idata_SIM0 <- tidyr::crossing(ID = 1:NSIM) %>%
  mutate(GRP = 1) %>%
  # 如需添加WT列可取消注释下一行
  # mutate(WT = rep(seq(41, 120, 1), each = 200)) %>%
  mutate(CL = sample(data_pkpd$ICL, size = NSIM, replace = TRUE)) %>%
  mutate(Q = sample(data_pkpd$IQ, size = NSIM, replace = TRUE)) %>%
  mutate(V2 = sample(data_pkpd$IV2, size = NSIM, replace = TRUE)) %>%
  mutate(V3 = sample(data_pkpd$IV3, size = NSIM, replace = TRUE)) %>%
  mutate(V7 = sample(data_pkpd$IV7, size = NSIM, replace = TRUE)) %>%
  mutate(Q2 = sample(data_pkpd$IQ2, size = NSIM, replace = TRUE)) %>%
  mutate(KA = sample(data_pkpd$IKA, size = NSIM, replace = TRUE)) %>%
  mutate(F1 = sample(data_pkpd$IF1, size = NSIM, replace = TRUE)) %>%
  mutate(BL_PD = sample(data_pkpd$BL_PD, size = NSIM, replace = TRUE)) %>%
  mutate(time = 0)

方案2:基于tidyr+dplyr的批量简洁写法

如果后续需要添加更多采样参数,不需要逐行写mutate,可通过批量映射减少重复代码:

library(tidyverse)
NSIM <- 100

# 定义需要采样的参数对应关系,左边为新列名,右边为data_pkpd中的源列名
param_map <- c(
  CL = "ICL", Q = "IQ", V2 = "IV2", V3 = "IV3", 
  V7 = "IV7", Q2 = "IQ2", KA = "IKA", F1 = "IF1", BL_PD = "BL_PD"
)

idata_SIM0 <- tidyr::crossing(ID = 1:NSIM) %>%
  mutate(GRP = 1, time = 0) %>%
  # 批量采样所有参数
  mutate(
    across(all_of(names(param_map)), 
           ~ sample(data_pkpd[[param_map[cur_column()]]], size = NSIM, replace = TRUE))
  )

新增采样参数仅需在param_map中添加对应关系即可,维护成本更低。

内容的提问来源于stack exchange,提问作者Ravua1992

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 10:24:03