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

R语言提取dataframe各列前三最小值及对应Type值的实现方法

R代码实现:分组提取最小Top3记录并按交替格式输出

以下代码无额外包依赖,基础R环境即可运行,直接替换输入数据框即可复用:

# 1. 构造测试数据(使用时替换为你自己的蛋白组表达数据框即可)
set.seed(123)
raw_df <- data.frame(
  Type = paste0("Protein_", LETTERS[1:20]),
  Group1 = rnorm(20, mean = 10, sd = 2),
  Group2 = rnorm(20, mean = 12, sd = 3),
  Group3 = rnorm(20, mean = 8, sd = 1.5),
  Group4 = rnorm(20, mean = 15, sd = 4)
)

# 2. 核心处理逻辑
# 定义要处理的分组列名,若你的列名有差异直接修改该向量即可
target_groups <- c("Group1", "Group2", "Group3", "Group4")
extract_topn <- 3 # 提取最小的前N条,可按需修改

group_result <- lapply(target_groups, function(col_name){
  # 按当前分组数值升序排列,提取前N条的Type和分组值
  sub_df <- raw_df[order(raw_df[[col_name]], decreasing = FALSE), ][1:extract_topn, c("Type", col_name)]
  # 重命名列,方便后续合并
  colnames(sub_df) <- c(paste0(col_name, "_Type"), col_name)
  # 新增排名字段用于横向拼接
  sub_df$rank_id <- 1:extract_topn
  return(sub_df)
})

# 横向合并所有分组结果,调整为Type、数值列交替的顺序
final_output <- Reduce(function(x,y) merge(x, y, by = "rank_id"), group_result)
col_order <- as.vector(rbind(paste0(target_groups, "_Type"), target_groups))
final_output <- final_output[, col_order]

代码说明

  • 输入数据要求:数据框必须包含存储标识的Type列,以及对应分组的数值列,若分组列命名和示例不一致,仅需修改target_groups向量内的列名即可。
  • 输出结果固定为N行(默认3行),列顺序严格按照「分组1_Type、分组1数值、分组2_Type、分组2数值……」的交替规则排列,完全匹配要求的格式。
  • 平局处理:如果分组内存在数值完全相同的记录,默认按原始数据的行号顺序取数;需要自定义平局规则时,可在order()函数内追加排序字段,例如order(raw_df[[col_name]], raw_df$Type, decreasing = FALSE)即可在数值相同时按Type字段的字典序排序。

测试运行上述代码得到的输出结构示意:

Group1_TypeGroup1Group2_TypeGroup2Group3_TypeGroup3Group4_TypeGroup4
Protein_T6.33023Protein_R6.853957Protein_R5.77528Protein_D7.220815
Protein_H7.30628Protein_O7.690627Protein_K6.54416Protein_S9.018406
Protein_K7.55848Protein_M8.579491Protein_D6.59424Protein_P10.21323

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 14:54:19