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

如何在R中按组基于抽样行号填充列(依据每组行数)

使用dplyr/tidyverse实现按组随机标记行

当然可以用tidyverse工具链实现这个需求,核心思路是按组生成行号,随机抽取指定数量的行号后标记对应行,以下是具体实现代码:

library(tidyverse)

# 生成示例数据(设置随机种子保证结果可复现)
set.seed(123)
dat <- data.frame(Group1 = sample(letters[1:3], 15, replace = TRUE))

# 核心处理逻辑
dat_with_sampled <- dat %>%
  group_by(Group1) %>%
  mutate(
    # 标记组内的行号,判断当前行是否在随机抽取的3个行号中
    sampled = case_when(
      row_number() %in% sample(row_number(), size = min(n(), 3), replace = FALSE) ~ 999,
      TRUE ~ NA_real_
    )
  ) %>%
  ungroup() # 可选:取消分组,根据后续需求决定

# 查看结果
print(dat_with_sampled)

代码说明:

  • group_by(Group1):按Group1列分组,确保后续操作在每组内独立执行
  • row_number():生成每组内的行号,用来定位组内的具体行
  • sample(row_number(), size = min(n(), 3), replace = FALSE):
    • 从组内行号中随机抽样,size = min(n(), 3)保证当组内行数不足3时,抽取所有行(避免抽样数量大于组内行数导致报错)
    • replace = FALSE确保不会重复抽取同一行
  • case_when():判断当前行是否在抽样行号中,符合条件则填充999,否则填充NA
  • ungroup():可选操作,若后续不需要分组状态,可取消分组

如果确定每组的行数都≥3,可直接将size = min(n(), 3)替换为size = 3,简化代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 16:41:02