r - 根据 R 中的预定比例将数据集中的个体分配到特定状态
问题描述
我有看起来像这样的数据
df <- data.frame(
age_grp10 = rep(c("00-09", "10-19", "20-29", "30-39", "40-49", "50-59", "60- 69", "70-79", "80-89"), 2),
sex = c(rep("M", 9), rep("F", 9)),
prob_arr = round((runif(18, min = 0.11, max = 2.50)), digits = 2),
prob_dep = round((runif(18, min = 0.11, max = 2.50)), digits = 2)
)
该数据集按年龄和性别给出了在一个日历年内到达或离开的人的比例。
然后我有人口水平数据,看起来像这样
pop_df <- data.frame(
uniq_ID = c("AFG1234", "WED1234", "POJ1234", "DER234", "QWE1234", "BGR1234", "ABC1234", "DSE1234", "UHJ1234", "POI234",
"EDC1234", "BGT1234", "MJI1234", "WEX1234", "FGH1234", "UJN1234", "LOK1234", "DRT1234", "URD1234", "MVR1234"),
age_grp10 = c("50-59", "40-49", "20-29", "40-49", "00-09", "50-59", "30-39", "70-79", "60-69", "40-49",
"80-89", "10-19", "30-39", "30-39", "50-59", "70-79", "00-09", "70-79", "20-29", "20-29"),
sex = c("M", "M", "F", "M", "F", "F", "F", "M", "F", "M", "F", "F", "M", "M", "M", "M", "M", "F", "M", "F"))
在这个人口数据集中,每一行都是一个个体,大约有 500 万人。它显示了他们的年龄和性别,以及唯一的 ID 号。根据第一个数据帧 (df) 中的比例,我想将到达和离开状态分配给人口数据帧 (pop_df) 中的个人。
我想要的输出看起来像
pop_df <- pop_df %>%
left_join(df) %>%
mutate(Arrived = c(0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0),
Departed = c(1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0))
在最后一个数据集中,Arrived 和 Departed 的值取决于 df 数据帧中的比例。因此,根据 df 数据帧中 prob_arr 的值,XX% 的 0-9 岁男性将被分配到达状态。
谢谢你的帮助
解决方案
假设(a)概率是百分比,并且(b)它们是独立的,这里有一个简单的方法dplyr
:
library(dplyr)
pop_df %>% left_join(df) %>%
mutate(Arrived = as.integer(runif(n()) * 100 < prob_arr),
Departed = as.integer(runif(n()) * 100 < prob_dep))
尽管相同的逻辑在以下方面同样简单base
:
joined_df = merge(pop_df, df)
transform(
joined_df,
Arrived = as.integer(runif(nrow(joined_df)) * 100 < prob_arr),
Departed = as.integer(runif(nrow(joined_df)) * 100 < prob_dep)
)
推荐阅读
- azure - Azure 应用服务无法从 wwwroot 文件系统加载 pfx 证书
- vba - 无法在自动过滤器中为标准数组获得所需的结果
- android - 无法在 axios 上发出 POST 请求(React-Native)
- r - 如何在 R 中使用 gamm 模型指定随机效应?
- c# - 将日期(年、月、日)转换为儒略日数并返回日期
- redux - 如何在 Redux 中重新启动我的 initialState 值
- c# - 为外部身份验证创建部分登录 cookie
- z3 - Z3:非线性算术和量词——错误的结果?
- vuejs2 - 如何使用计算属性绑定数据表中的字段?
- php - 使用 foreach 从数据库中删除行。(PHP)