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

如何在R中按name值递增比例随机将value列设为NA?

在R中按规则为数据框指定行随机替换value为NA的实现

没问题,这在R里完全可以实现。我们可以结合dplyr的分组操作和随机抽样逻辑,精准匹配你需要的规则。以下是基于你提供的示例数据的完整实现代码:

library(tidyverse)
set.seed(0)

# 生成示例数据
df <- map_dfc(1:3, \(i) round(rbeta(5, i+.1, i+12, i*.2),2)) %>% 
  pivot_longer(everything()) %>% 
  mutate(name=as.numeric(str_remove(name, "...")))

# 按规则随机替换NA
df_with_na <- df %>%
  group_by(name) %>%
  mutate(
    value = case_when(
      name < 2 ~ value,  # name小于2的行不做处理
      TRUE ~ ifelse(
        rbinom(n(), 1, prob = (name - 1) * 0.1) == 1,  # 计算对应替换概率:name每加1,概率涨10%
        NA_real_,
        value
      )
    )
  ) %>%
  ungroup()

# 查看处理后的数据
print(df_with_na)

核心逻辑说明:

  • 分组处理:用group_by(name)把数据按name值分组,保证每个组独立计算随机替换的概率
  • 概率匹配:替换概率用(name - 1)*0.1计算,刚好对应name=2时10%、name=3时20%的要求,后续更高的name值也会自动按10%递增
  • 随机替换:rbinom(n(), 1, prob)会生成和当前组行数一致的0/1随机向量,抽到1的行就把value换成NA,抽到0的保留原值
  • 过滤规则:通过case_when确保name<2的行完全不受影响,保留原始数据

你可以修改set.seed()的值来复现不同的随机结果,也可以调整概率公式来适配其他递增规则。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 14:57:47