R语言中如何为数据集列Y精确分配指定数量的随机1?
问题描述
现有数据集包含X、Y两列,两列的0和1数量完全一致:0有3790个,1有654个。需将Y列调整为精确包含1733个1和2711个0,需从X列值为0的位置中随机选取1079个(1733-654),将对应Y值设为1。尝试以下代码后,每次运行得到的1的数量均不固定,求实现精确数量的方法:
ind <- which(df$X == 0) ind <- ind[rbinom(length(ind), 1, prob = 1079/3790) > 0] df$Y[ind] <- 1
解决方案
你用rbinom是按概率随机抽样,抽出来的样本量会随机波动,没法保证刚好选到1079个。要实现精确抽取指定数量的样本,直接用sample()函数即可:
# 筛选所有X列值为0的行索引 ind_x0 <- which(df$X == 0) # 从这些索引中精确随机选取1079个(无放回抽样) selected_ind <- sample(ind_x0, size = 1079, replace = FALSE) # 将选中行的Y列值设为1 df$Y[selected_ind] <- 1
这段代码每次运行都会精准选中1079个X=0的行,加上原有的654个1,Y列的1总数恰好为1733,完全符合需求。
内容的提问来源于stack exchange,提问作者Robbert
相关产品推荐
相关产品推荐

