如何随机替换因子中指定类别5%的取值?
随机修改数据框中指定类别的部分样本值
原始数据
首先运行以下代码生成初始数据框:
set.seed(1) df <- data.frame( WHO = as.factor(sample(1:3, size = 6000, replace = TRUE, prob = c(0.80, 0.15, 0.05))) )
初始频数统计结果:
> table(df$WHO) 1 2 3 4753 923 324
需求
需要随机选取df$WHO == 1中的5%样本,将其WHO值替换为2,最终期望得到的频数统计为:
> table(df$WHO) 1 2 3 4515 1161 324
实现方案
使用以下代码完成完全随机的样本替换:
# 获取所有WHO为1的行索引 who1_rows <- which(df$WHO == 1) # 计算需要替换的样本数量(取WHO=1样本数的5%) replace_count <- round(length(who1_rows) * 0.05) # 随机抽取不重复的目标索引 selected_rows <- sample(who1_rows, size = replace_count, replace = FALSE) # 替换选中行的WHO值为2(保留因子水平) df$WHO[selected_rows] <- factor(2, levels = levels(df$WHO)) # 验证结果 table(df$WHO)
代码说明
which(df$WHO == 1):精准筛选出所有WHO取值为1的行位置sample(..., replace = FALSE):确保抽取的是无重复的随机样本,满足完全随机的要求factor(2, levels = levels(df$WHO)):替换时保留原因子的所有水平,避免后续统计出现异常
内容的提问来源于stack exchange,提问作者cmirian
相关产品推荐
相关产品推荐

