You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按设定频率随机修改R数据框每行的指定数量取值

实现代码

首先直接给出满足需求的完整可运行代码,核心逻辑是给每行随机生成0-5的修改列数,仅对选中的列执行替换规则,其余列保留原值,最大程度和原数据保持一致:

library(dplyr)
library(purrr)

# 构造示例数据
df <- structure(list(V1 = c("chr1:10150", "chr1:10219", "chr1:10230", 
"chr1:10427", "chr1:10439", "chr1:10440", "chr1:10443", "chr1:13459", 
"chr1:14397", "chr1:15219"), V2 = c("Y", "Y", "Y", "N", "-", 
"N", "Y", "N", "Y", "N"), V3 = c("N", "N", "N", "N", "N", "N", 
"N", "N", "Y", "N"), V4 = c("N", "Y", "-", "-", "-", "N", "Y", 
"N", "-", "N"), V5 = c("Y", "Y", "Y", "Y", "Y", "Y", "Y", "N", 
"Y", "N"), V6 = c("-", "-", "-", "Y", "-", "Y", "Y", "N", "Y", 
"N"), V7 = c("Y", "N", "N", "N", "Y", "Y", "Y", "N", "Y", "N"
), V8 = c("N", "N", "Y", "-", "-", "N", "Y", "N", "N", "N"), 
    V9 = c("N", "N", "N", "N", "-", "N", "Y", "N", "Y", "-"), 
    V10 = c("N", "Y", "N", "N", "N", "Y", "-", "Y", "Y", "N"), 
    V11 = c("N", "N", "N", "N", "N", "N", "N", "N", "N", "N")), row.names = c(NA, 
-10L), class = "data.frame")

# 自定义值替换规则,可根据需求自行调整
modify_val <- function(x) {
  case_when(
    x == "Y" ~ "-",
    x == "N" ~ "Y",
    x == "-" ~ "Y"
  )
}

# 核心处理逻辑
df_modified <- df %>%
  rowwise() %>%
  mutate(
    # 随机生成当前行要修改的列数,范围0-5,可自行调整范围
    n_modify = sample(0:5, size = 1),
    vals = list(c_across(V2:V11)),
    # 随机选中要修改的列索引
    modify_idx = list(sample(1:10, size = n_modify)),
    new_vals = list({
      v <- vals
      v[modify_idx] <- modify_val(v[modify_idx])
      v
    })
  ) %>%
  ungroup() %>%
  # 把修改后的数据还原为原数据框结构
  mutate(V2 = map_chr(new_vals, 1),
         V3 = map_chr(new_vals, 2),
         V4 = map_chr(new_vals, 3),
         V5 = map_chr(new_vals, 4),
         V6 = map_chr(new_vals, 5),
         V7 = map_chr(new_vals, 6),
         V8 = map_chr(new_vals, 7),
         V9 = map_chr(new_vals, 8),
         V10 = map_chr(new_vals, 9),
         V11 = map_chr(new_vals, 10)) %>%
  select(V1, V2:V11)

参数调整说明

  • 要修改每行允许的编辑列数范围,直接调整sample(0:5, size = 1)里的起始和终止数值即可,比如要限定每行修改1-3个值就改成sample(1:3, size = 1)
  • 要调整值替换规则,直接修改modify_val函数内的case_when逻辑即可
  • 需要固定可复现的随机结果,运行代码前先执行set.seed(自定义整数),比如set.seed(123)

内容的提问来源于stack exchange,提问作者neuron

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 14:48:00