如何在R中基于另一列条件随机修改指定比例列值符号
在R中基于列值对指定比例的数值取反
方法一:使用dplyr包(推荐)
你之前遇到过滤丢行的问题,核心是不需要先过滤行,直接在mutate里做条件判断和随机抽样即可:
library(dplyr) set.seed(123) # 设置随机种子,保证结果可重复 df_modified <- df %>% mutate( exposure = if_else( object == "Toy" & sample(c(TRUE, FALSE), n(), replace = TRUE, prob = c(0.1, 0.9)), -exposure, exposure ) )
代码说明:
set.seed(123):固定随机数生成逻辑,方便调试和复现结果object == "Toy":锁定需要处理的行范围sample(...):为每一行生成随机逻辑值,其中10%为TRUE(标记需要取反的行)if_else:仅当该行是Toy行且被随机选中时,对exposure取反,其余行保持原值不变
方法二:使用Base R
如果不想加载额外包,用基础R也能实现:
set.seed(123) # 先定位所有object为Toy的行 toy_rows <- df$object == "Toy" # 从Toy行中随机选取10%的行索引 selected_indices <- sample(which(toy_rows), size = round(sum(toy_rows)*0.1)) # 对选中行的exposure值取反 df_modified_base <- df df_modified_base$exposure[selected_indices] <- -df_modified_base$exposure[selected_indices]
代码说明:
which(toy_rows):获取所有Toy行的位置索引sample(...):按Toy行总数的10%随机抽取索引- 直接对选中索引的
exposure列赋值取反,其余行不受影响
内容的提问来源于stack exchange,提问作者JHo
相关产品推荐
相关产品推荐

