技术求助:基于条件随机分配生成数据集的Insider Presence列
条件随机分配解决方案:为Unknown行实现50%概率标记1/0
完整代码实现(使用dplyr)
library(dplyr) library(stringr) # 构造示例数据集 df <- tibble( COMPANY = c("A", "B", "C", "D", "E", "F", "G", "H", "I", "J"), BOARDROLE = c("Acting Director", "CEO", "Independent Director", "Chairman", "Chairman", "Member", "Independent Director", "Member", "Member", "Member"), INSIDER = c("Yes", "Yes", "No", "Unknown", "Unknown", "Unknown", "Outsider", "Unknown", "Unknown", "Unknown") ) # 生成InsiderPresence列 set.seed(123) # 设置随机种子保证结果可复现 df <- df %>% mutate(InsiderPresence = case_when( str_detect(INSIDER, "No|Outsider") ~ 0, INSIDER == "Yes" ~ 1, INSIDER == "Unknown" ~ sample(c(0, 1), n(), replace = TRUE, prob = c(0.5, 0.5)), TRUE ~ NA_real_ )) # 输出结果 print(df, width = Inf)
代码逻辑说明
- 固定规则处理:
- 当
INSIDER为No或Outsider时,InsiderPresence设为0; - 当
INSIDER为Yes时,InsiderPresence设为1;
- 当
- 随机分配处理:
- 针对
INSIDER为Unknown的行,使用sample()函数以50%的概率随机生成0或1; - 添加
set.seed(123)可以固定随机结果,方便后续调试和结果复现;
- 针对
- 兜底逻辑:
- 最后一个分支
TRUE ~ NA_real_用于处理未覆盖的异常取值,返回NA便于排查数据问题。
- 最后一个分支
替代实现方式(分两步处理)
如果更习惯分步操作,可以先按原逻辑初始化列,再替换Unknown行的取值:
set.seed(123) df <- df %>% mutate( # 先处理已知条件 InsiderPresence = ifelse(str_detect(INSIDER, "No|Outsider"), 0, 1), # 替换Unknown行的随机值 InsiderPresence = ifelse(INSIDER == "Unknown", sample(c(0,1), n(), replace = TRUE, prob = c(0.5,0.5)), InsiderPresence) )
内容的提问来源于stack exchange,提问作者Robbert
相关产品推荐
相关产品推荐

