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

R语言处理多数据框:SiteName重复超50次时随机抽样实现方法

R代码实现方案

你可以根据自己的使用习惯选择以下两种实现方式:

方法1:tidyverse生态实现(代码简洁易维护,推荐)

需要先加载dplyr和purrr两个包:

# 加载依赖包
library(dplyr)
library(purrr)

# 定义单个数据框的处理函数
process_single_df <- function(df) {
  df %>%
    group_by(SiteName) %>%
    slice_sample(n = min(n(), 50)) %>% # 每组最多保留50行,不足50行则全留
    ungroup()
}

# 遍历整个数据框列表完成处理
Visit.data_processed <- map(Visit.data_allyears, process_single_df)

方法2:base R实现(无需安装第三方包)

Visit.data_processed <- lapply(Visit.data_allyears, function(df) {
  # 按SiteName拆分分组
  df_split <- split(df, df$SiteName)
  # 对每个分组处理
  df_processed <- lapply(df_split, function(group_df) {
    n_row <- nrow(group_df)
    if (n_row > 50) {
      # 超过50行随机抽50行
      group_df[sample(n_row, 50), ]
    } else {
      # 不足50行直接返回
      group_df
    }
  })
  # 合并所有分组为单个数据框
  do.call(rbind, df_processed)
})

补充说明

  • 如果需要抽样结果可复现,可在运行代码前执行set.seed(自定义数值),例如set.seed(123)
  • 以上代码默认执行无放回抽样,如果需要有放回抽样,可在slice_sample(tidyverse方案)中添加replace = TRUE参数,或在base R方案的sample()函数中添加replace = TRUE参数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 15:24:01