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

R中使用dplyr的mutate时如何通过for循环迭代逐行赋值?

R代码逐行生成独立随机数解决方案

问题根源

你代码中调用runif(1, 0, 8)仅生成1个随机标量,dplyr会自动将这个标量广播到数据的所有行,因此所有行使用的相加值完全一致。同理你的rbinom参数中runif(1,0.34,0.37)也会让所有行使用同一个概率生成异常标记,若需要每行概率独立也需要同步调整。

解决方案

方案1:向量化生成匹配行数的随机数(推荐,执行效率更高)

直接将runif的第一个参数(生成随机数的个数)设置为n(),n()在dplyr的mutate语境下会自动返回当前数据集的行数,一次性生成和行数匹配的独立随机数:

mutate(enter_sim_time = arrive_hrs) %>% # 新增列记录抵达时间
  # 若需要固定全局异常概率,可直接写固定数值即可,比如0.355
  mutate(exc_flag = rbinom(n(), 1, runif(n(), 0.34, 0.37))) %>% # 新增列标记工作项是否流转至异常流程
  mutate(exc_enter_sim_time = ifelse(exc_flag == 1, enter_sim_time + runif(n(), 0, 8), enter_sim_time))

方案2:逐行迭代模式(可读性强,适合复杂逐行逻辑场景)

使用dplyr的rowwise()开启逐行运算模式,每行都会独立执行一次随机数生成逻辑,运算结束后需调用ungroup()取消行分组避免影响后续操作:

mutate(enter_sim_time = arrive_hrs) %>% # 新增列记录抵达时间
  rowwise() %>% 
  mutate(
    exc_flag = rbinom(1, 1, runif(1, 0.34, 0.37)), # 新增列标记工作项是否流转至异常流程
    exc_enter_sim_time = ifelse(exc_flag == 1, enter_sim_time + runif(1, 0, 8), enter_sim_time)
  ) %>% 
  ungroup()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 12:06:02