如何在R中基于另一数据框的概率为变量赋值?
解决按ID对应概率抽样填充变量的问题
错误原因
- base R的
sample()函数没有prop参数,正确用于指定抽样概率的参数是prob - 未按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()表示为当前组的每一条记录都抽样一个nameprob指定每个name对应的抽样概率(即probabilities中的ratio列)replace = TRUE允许重复抽样,保证每条记录都能得到结果
验证示例
运行代码后查看结果:
print(data)
ID=1的记录会以90%概率为"A"、10%概率为"B",ID=4的记录会以30%/30%/40%的概率对应"B"/"C"/"G",完全符合需求。
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

