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

如何在R中基于条件移除特定类别60%的数据?

解决R中移除特定类别60%数据并保留原数据集结构的问题

我明白你的问题了——你想保留原数据集的整体结构,只移除Outcome=="diabetes"这个类别里60%的数据,而不是单独提取这个类别再切片。原来的代码确实只处理了糖尿病组,没把其他类别加回来,我给你两种简单的解决方法:

方法一:用dplyr分组采样(推荐)

这种方法通过分组后按比例采样,一步完成筛选,代码简洁且保留原数据集的结构:

library(dplyr)

# 保留非糖尿病的全部数据,以及糖尿病的40%数据(即移除60%)
dataset_filtered <- dataset %>%
  group_by(Outcome) %>%
  slice_sample(prop = ifelse(Outcome == "diabetes", 0.4, 1)) %>%
  ungroup()

代码解释:

  • group_by(Outcome):按Outcome字段分组,这样我们可以对不同类别分别处理
  • slice_sample(prop = ...):对每个组按指定比例采样。这里给非糖尿病组设置比例为1(保留全部),糖尿病组设置为0.4(保留40%,相当于移除60%)
  • ungroup():取消分组,回到普通的数据框结构

方法二:拆分后合并(更直观)

如果你觉得分组的逻辑有点绕,可以先拆分数据集,分别处理后再合并:

library(dplyr)

# 第一步:提取所有非糖尿病的数据(全部保留)
non_diabetes_data <- dataset %>% filter(Outcome != "diabetes")

# 第二步:提取糖尿病数据并随机保留40%
diabetes_remaining <- dataset %>%
  filter(Outcome == "diabetes") %>%
  slice_sample(prop = 0.4)

# 第三步:合并两部分数据,得到最终结果
dataset_filtered <- bind_rows(non_diabetes_data, diabetes_remaining)

注意事项:

  • 如果你使用的是旧版本的dplyr(1.0.0之前),slice_sample可能不存在,可以用sample_frac(0.4)代替
  • 因为是随机采样,每次运行得到的具体行可能略有不同,但整体比例会符合要求

验证结果

你可以用下面的代码检查处理后各类别的数量,确认糖尿病组确实只保留了约40%:

# 原数据集类别数量
dataset %>% count(Outcome)

# 处理后数据集类别数量
dataset_filtered %>% count(Outcome)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:31:33