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

如何基于行值为DataFrame添加多项分布概率计算新列?

解决方法

核心公式

多项分布的单一场景概率计算公式为:

P(a, b, c) = (n! / (a! * b! * c!)) * p_A^a * p_B^b * p_C^c
其中n为总选民数(此处n=11),a、b、c分别是三位候选人的得票数,p_A、p_B、p_C对应各自的获选概率(0.5、0.3、0.2)。

代码实现

假设你的DataFrame列名为a_votes、b_votes、c_votes,以下两种方式均可完成概率列的添加:

方法1:dplyr + purrr 实现逐行计算

library(dplyr)
library(purrr)

# 定义多项分布概率计算函数
calc_multinom_prob <- function(a, b, c) {
  factorial(11) / (factorial(a) * factorial(b) * factorial(c)) * 
    0.5^a * 0.3^b * 0.2^c
}

# 为DataFrame新增概率列
your_df <- your_df %>%
  mutate(probability = pmap_dbl(list(a_votes, b_votes, c_votes), calc_multinom_prob))

方法2:Base R 原生实现

若不想加载额外包,可直接用apply函数:

# 定义计算函数
calc_multinom_prob <- function(row) {
  a <- row[1]
  b <- row[2]
  c <- row[3]
  factorial(11) / (factorial(a) * factorial(b) * factorial(c)) * 
    0.5^a * 0.3^b * 0.2^c
}

# 添加概率列
your_df$probability <- apply(your_df[, c("a_votes", "b_votes", "c_votes")], 1, calc_multinom_prob)

注意事项

  • 确保每行的a_votes + b_votes + c_votes等于11,否则计算结果无效。
  • 若你的DataFrame列名不同,需替换代码中对应的列名。

最后求和即可得到A获胜的总概率:

total_win_prob <- sum(your_df$probability)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 02:45:40