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

在R中满足双条件时生成不同随机数的实现方法

解决特定分组生成不重复随机数的问题

你的问题出在rep(rnorm(3,10,2),3)这段代码:先生成3个随机数再重复3次,导致目标行的Value是重复值。要生成独立的随机数,只需为目标行生成对应数量的随机数即可,以下是两种可行方案:

方案一:定位目标行直接赋值

先筛选出Distance=0.5且Age=1的行,再为这些行生成对应数量的独立随机数:

set.seed(321)
dat <- data.frame(matrix(ncol = 3, nrow = 27))
colnames(dat)[1:3] <- c("Distance", "Age", "Value")
dat$Distance <- rep(c(0.5,1.5,2.5), each = 9)
dat$Age <- rep(1:3, times = 9)

# 定位目标行
target_rows <- dat$Distance == 0.5 & dat$Age == 1
# 为目标行生成对应数量的随机数
dat$Value[target_rows] <- rnorm(sum(target_rows), 10, 2)

# 查看结果
dat[target_rows, ]

方案二:修正ifelse写法

让ifelse的TRUE分支生成与数据框行数相同的随机数,ifelse会自动为每个TRUE位置匹配独立的随机数:

set.seed(321)
dat <- data.frame(matrix(ncol = 3, nrow = 27))
colnames(dat)[1:3] <- c("Distance", "Age", "Value")
dat$Distance <- rep(c(0.5,1.5,2.5), each = 9)
dat$Age <- rep(1:3, times = 9)

dat$Value <- ifelse(dat$Distance == 0.5 & dat$Age == 1,
                    rnorm(nrow(dat), 10, 2),
                    NA)

# 查看结果
dat[dat$Distance == 0.5 & dat$Age == 1, ]

两种方案都能让目标组合的每行Value得到不同的随机数,运行后可看到类似如下的结果(因set.seed(321)固定了随机种子,结果可复现):

Distance Age     Value
1      0.5   1  7.472644
4      0.5   1 10.688895
7      0.5   1  9.264149

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 00:36:28