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

基于gs_name列出现次数筛选hallmark数据框行的技术咨询

筛选数据框中分组行数符合条件的行

在hallmark数据框中,gs_name列存在重复值,每个gs_name对应多行或单行数据。需要保留那些gs_name对应行数小于25行或大于500行的所有数据行。

用户尝试的错误代码:

for (i in hallmark$gs_name) {
  if (25 <= nrow(hallmark) >= 500) {
    subset.df <- hallmark
  }
}

注:这段代码逻辑错误,既没有统计每个gs_name的分组行数,条件判断的是整个数据框的行数,且循环赋值会不断覆盖结果。

输入数据示例:

> dput(hallmark[c(1:5,300:305),3:4])
structure(list(gs_name = c("adipogenesis", "adipogenesis", "adipogenesis", 
"adipogenesis", "adipogenesis", "bile_acid_metabolism", "bile_acid_metabolism", 
"bile_acid_metabolism", "bile_acid_metabolism", "bile_acid_metabolism", 
"bile_acid_metabolism"), gene_symbol = c("ABCA1", "ABCB8", "ACAA2", 
"ACADL", "ACADM", "HSD17B4", "HSD17B6", "HSD3B1", "HSD3B7", "IDH1", 
"IDH2")), row.names = c(NA, -11L), class = c("tbl_df", "tbl", 
"data.frame"))

方法一:Base R 实现

先统计每个分组的行数,再筛选符合条件的分组并提取对应行:

# 统计每个gs_name的行数
group_counts <- table(hallmark$gs_name)
# 筛选出符合条件的gs_name
valid_groups <- names(group_counts)[group_counts < 25 | group_counts > 500]
# 提取对应的数据行
subset_df <- hallmark[hallmark$gs_name %in% valid_groups, ]

方法二:dplyr 实现(更简洁)

利用tidyverse的分组筛选逻辑,代码更直观:

library(dplyr)

subset_df <- hallmark %>%
  group_by(gs_name) %>%
  filter(n() < 25 | n() > 500) %>%
  ungroup()

说明:group_by(gs_name)按gs_name分组,n()返回当前分组的行数,filter保留行数满足条件的分组所有行,最后ungroup()取消分组恢复数据框结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 03:02:28