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

如何用dplyr将dataframe特定值替换为同组内随机非999行对应值

实现代码

先加载dplyr包:

library(dplyr)

执行转换逻辑:

# 可选:设置随机种子固定替换结果,方便复现
# set.seed(123)

df_res <- df %>%
  group_by(team) %>%
  mutate(
    # 生成当前分组内非999的候选数据子集
    valid_pool = list(filter(cur_data(), result != "999")),
    # 同时处理两个需要替换的列
    across(c(result, result_number), ~ if_else(
      result == "999",
      sample(valid_pool[[1]][[cur_column()]], size = 1),
      .x
    ))
  ) %>%
  # 移除辅助列,取消分组
  select(-valid_pool) %>%
  ungroup()

逻辑说明

  • 按team字段分组,确保替换操作的候选集仅来自同一分组
  • 用cur_data()获取当前分组的全量数据,过滤掉result为999的行后存为列表类型的辅助列valid_pool,每个分组对应一个独立的候选集
  • 用across同时批量处理result和result_number两列:仅当行的result为999时,从候选集的对应列随机抽取1个值替换,否则保留原始值
  • 最后移除辅助列、取消分组即可得到结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 06:45:06