根据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
我有一个如下所示的概率数据框,称为 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