根据R中的概率table/data帧分配随机变量

Assigning a random variable based on a probability table/data frame in R

我有一个如下所示的概率数据框,称为 ptable:

 unique_id color share 
         1   red  0.3  
         1  blue  0.7  
         2   red  0.4  
         3  blue  0.5  

我想根据可能 table 中的 share 变量将一个 color 变量随机分配给另一个数据框 join_table,如下所示。

unique_id count
         1    3  
         2    4 

我了解 sample(),但对如何通过共享 unique_id 分配概率感到困惑。我最近的尝试是

join_table %>% 
group_by(unqiue_id) %>% 
mutate(color= sample(ptable$race[unique_id==ptable$unique_id], 
                     size=n(), 
                     prob=ptable$share[nique_id==ptable$unique_id], 
                     replace=TRUE))

任何帮助都会很棒。

代码中有两个错别字:

group_by(unqiue_id) 应该是 group_by(unique_id)

prob=ptable$share[nique_id==ptable$unique_id] 应该是 prob=ptable$share[unique_id==ptable$unique_id].

这应该有效:

library(dplyr)
#> 
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#> 
#>     filter, lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union
ptable <- tibble::tribble(
  ~unique_id, ~color, ~share,
1,   "red",  0.3,  
1,  "blue",  0.7, 
2,   "red",  0.4,
3,  "blue",  0.5)

join_table <- tibble::tribble(
  ~unique_id, ~count,
  1,    3,  
  2,    4)

join_table %>% 
  group_by(unique_id) %>% 
  mutate(color= sample(ptable$color[unique_id==ptable$unique_id], 
                       size=n(), 
                       prob=ptable$share[unique_id==ptable$unique_id], 
                       replace=TRUE))
#> # A tibble: 2 × 3
#> # Groups:   unique_id [2]
#>   unique_id count color
#>       <dbl> <dbl> <chr>
#> 1         1     3 blue 
#> 2         2     4 red

reprex package (v2.0.1)

创建于 2022-03-01