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

R语言:如何按列名和行循环函数,按比例生成二项式感染标记?

在R中根据列值生成对应概率的二项式标记

首先说明:你提到的“列表”大概率是R中的数据框(data frame),这是处理表格数据最常用的结构,下面的示例都基于数据框展开。

步骤1:准备示例数据(可替换成你的真实数据)

先创建一个模拟数据框方便演示,你可以把df换成自己的数据框,age换成你要处理的目标列名:

# 设置随机种子,让结果可重复
set.seed(123)
df <- data.frame(
  col1 = rnorm(100),
  col2 = runif(100),
  age = sample(c(15,16,17,18), 100, replace = TRUE), # 目标列,包含15、16等取值
  col4 = sample(letters, 100, replace = TRUE),
  col5 = sample(1:10, 100, replace = TRUE)
)

步骤2:定义值与感染概率的映射

把不同目标值对应的感染概率存成命名向量,方便后续调用:

prob_map <- c(
  "15" = 0.001,  # 15对应0.1%感染概率
  "16" = 0.005,  # 16对应0.5%感染概率
  "17" = 0.01,   # 示例:17对应1%感染概率
  "18" = 0.02    # 示例:18对应2%感染概率
)
# 可以继续添加更多值和对应的概率

方法一:用循环实现(适合新手理解逻辑)

既然你刚接触循环,先写最直观的for循环:

# 新增一列infection,初始值设为0
df$infection <- 0

# 遍历每一行
for (i in 1:nrow(df)) {
  # 取出当前行目标列的值,转成字符匹配命名向量的键
  current_val <- as.character(df$age[i])
  # 获取对应感染概率
  p <- prob_map[current_val]
  # 生成二项式随机数:1次试验,概率p,结果0(未感染)或1(感染)
  df$infection[i] <- rbinom(n = 1, size = 1, prob = p)
}

方法二:向量化操作(更高效,推荐)

R的优势是向量化运算,不用循环也能快速完成,这里提供两种方式:

方式1:基础R的mapply函数

df$infection <- mapply(
  function(x) rbinom(n = 1, size = 1, prob = prob_map[as.character(x)]),
  df$age
)

方式2:用dplyr包(语法更清晰)

如果习惯用管道语法,dplyr会更友好:

# 没安装的话先执行:install.packages("dplyr")
library(dplyr)

df <- df %>%
  mutate(
    infection = case_when(
      age == 15 ~ rbinom(n(), 1, 0.001),
      age == 16 ~ rbinom(n(), 1, 0.005),
      age == 17 ~ rbinom(n(), 1, 0.01),
      age == 18 ~ rbinom(n(), 1, 0.02),
      TRUE ~ 0  # 对未定义的值,默认感染概率为0
    )
  )

关键函数说明

  • rbinom(n, size, prob):生成二项分布随机数,参数分别是生成数量、单次试验次数、成功概率。这里每次生成1个值,对应1次“是否感染”的试验。
  • 命名向量prob_map:通过字符匹配快速获取对应概率,避免大量if-else判断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 22:41:33