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

R语言:如何按GeneFunction分组筛选数据框的目标行?

解决方法

核心思路

用dplyr包的分组操作可以轻松实现你的需求,避免复杂且容易出错的for循环。先按基因功能组分组,计算每组的最高覆盖率,再筛选符合条件的行。

步骤1:安装并加载dplyr包

如果你还没安装过dplyr,先运行安装命令:

install.packages("dplyr")

然后加载包:

library(dplyr)

步骤2:读取数据(保留你的原有代码)

sample <- read.csv("Ksg_3Q_vs_NDCsharedSupplemented_T60_Top_Newannot.csv")

步骤3:实现需求a+b(保留最高值及高于其90%的行)

filtered_sample <- sample %>%
  # 按TreatmentGeneFuncion分组
  group_by(TreatmentGeneFuncion) %>%
  # 给每组新增一列,记录该组的Shared_NDC_Coverage最大值(na.rm处理缺失值)
  mutate(max_coverage = max(Shared_NDC_Coverage, na.rm = TRUE)) %>%
  # 筛选出覆盖率≥最大值90%的行(包含最大值本身)
  filter(Shared_NDC_Coverage >= 0.9 * max_coverage) %>%
  # 取消分组,恢复普通数据框格式
  ungroup()

步骤4:单独实现需求a(仅保留每组最高值的行)

如果只需要每组中覆盖率最高的行,用这段代码:

max_only_sample <- sample %>%
  group_by(TreatmentGeneFuncion) %>%
  filter(Shared_NDC_Coverage == max(Shared_NDC_Coverage, na.rm = TRUE)) %>%
  ungroup()

你的原有代码问题说明

  • for循环逻辑错误:which.max(sample$Shared_NDC_Coverage[a])仅针对单个值取位置(结果永远是1),且赋值给sample[a]会把整行替换成数字,完全不符合筛选需求;
  • distinct()函数只是保留每组的第一行,而非最大值对应的行,因此无法实现筛选最高值的目的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 06:35:19