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

如何为数据框每个y值生成独立随机数并创建新列z?

嘿,这个问题我之前也碰到过!核心问题出在你调用runif(n=1,...)的时候,它只会生成一个随机数,然后因为R的向量循环特性,这个单一数值会被重复应用到每一行的计算里,所以所有行的z都是用同一个随机数算出来的,完全不符合你“每个y值对应独立随机数”的需求。

正确的实现方法

这里有两种简洁靠谱的写法:

方法1:利用runif对向量参数的原生支持

这是最高效的写法,不需要额外分组,直接让runif生成对应行数的随机数:

library(tidyverse)
set.seed(123)
df <- data.frame(x = runif(5, 0, 5), y = runif(5,0,5))

# 修正后的代码
df <- df %>% mutate(z = y - runif(n = n(), min = 0, max = y))

方法2:用rowwise()逐行处理(适合复杂行级逻辑)

如果之后你需要更复杂的逐行操作,用rowwise()会更直观,记得最后取消分组:

df <- df %>% 
  rowwise() %>% 
  mutate(z = y - runif(n=1, min=0, max=y)) %>%
  ungroup() # 必须取消行分组,避免后续操作出现意外行为

效果验证

用set.seed(123)固定随机种子后,方法1生成的z列会是:

> df$z
[1] 0.1032108 1.3876754 2.0086170 1.4547670 1.2072729

每一行的随机数都是独立生成的,完全符合你的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:01:11