如何基于R数据框列值生成带条件概率的随机二分类结果
实现步骤
前置准备
首先设置随机种子保证结果可复现,同时构造你提供的示例数据集:
# 设置随机种子 set.seed(123) # 构造示例数据 ID <- c(1:200) State <-c("A", "B", "C", "D") State <- sort(rep(State, 50)) df <- data.frame(ID=ID, State=State)
生成二分类结果
我们通过R自带的二项分布随机数生成函数rbinom()实现需求,对应规则为:州A/C生成1的概率为0.7,州B/D生成1的概率为0.5(即完全随机),两种实现方式可选:
方法1:base R原生实现
# 定义各州对应的1的生成概率 prob_map <- c("A" = 0.7, "B" = 0.5, "C" = 0.7, "D" = 0.5) # 逐行生成二分类结果存入新列 df$class_result <- mapply(function(s) rbinom(1, 1, prob = prob_map[s]), df$State)
方法2:dplyr实现(可读性更高)
library(dplyr) df <- df %>% mutate( # 按州匹配生成概率 prob = case_when( State %in% c("A", "C") ~ 0.7, State %in% c("B", "D") ~ 0.5 ), # 生成二分类结果 class_result = rbinom(n(), 1, prob = prob) ) %>% select(-prob) # 不需要概率辅助列可直接删除
结果验证
你可以运行以下代码验证分类结果占比是否符合预期:
# 按州统计1的占比 prop.table(table(df$State, df$class_result), 1)
正常输出中A、C州的1占比在70%上下波动,B、D州的1占比在50%上下波动,符合需求。
内容的提问来源于stack exchange,提问作者Ekow_ababio
相关产品推荐
相关产品推荐

