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

如何在R中基于另一数据框的概率为变量赋值?

解决按ID对应概率抽样填充变量的问题

错误原因

  1. base R的sample()函数没有prop参数,正确用于指定抽样概率的参数是prob
  2. 未按ID分组处理,导致无法为每个ID匹配对应的概率分布和名称选项

解决方案代码

library(dplyr)

# 按ID分组,针对每个ID对应的概率分布抽样name
data <- data %>%
  group_by(ID) %>%
  mutate(
    name = sample(
      x = filter(probabilities, ID == cur_group()$ID)$name,
      size = n(),
      prob = filter(probabilities, ID == cur_group()$ID)$ratio,
      replace = TRUE
    )
  ) %>%
  ungroup()

代码说明

  • group_by(ID):将data按ID分组,确保每个ID单独处理对应的概率规则
  • cur_group()$ID:获取当前分组的ID值,用于从probabilities中筛选匹配的名称和概率
  • sample(x, size = n(), prob = ..., replace = TRUE):
    • x是当前ID对应的所有可选name值
    • size = n()表示为当前组的每一条记录都抽样一个name
    • prob指定每个name对应的抽样概率(即probabilities中的ratio列)
    • replace = TRUE允许重复抽样,保证每条记录都能得到结果

验证示例

运行代码后查看结果:

print(data)

ID=1的记录会以90%概率为"A"、10%概率为"B",ID=4的记录会以30%/30%/40%的概率对应"B"/"C"/"G",完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 06:15:22