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

如何从R数据框中获取各样本对应最高测序读数的科属

解决R语言样本对应最高读数植物科的问题

假设你的原始数据框结构类似下面的示例(第一列为植物科Family,其余列为各样本的测序读数):

# 示例数据
plant_data <- data.frame(
  Family = c("Rosaceae", "Asteraceae", "Poaceae", "Fabaceae"),
  Sample1 = c(120, 340, 210, 180),
  Sample2 = c(90, 450, 320, 270),
  Sample3 = c(250, 190, 410, 300)
)

方法1:基础R实现

通过遍历样本列,匹配最大值对应的植物科:

# 获取所有样本列名称(排除Family列)
sample_cols <- colnames(plant_data)[-1]

# 逐个样本找到读数最高的植物科
top_families <- sapply(sample_cols, function(col) {
  # 找到当前列最大值的行索引,提取对应的Family
  plant_data$Family[which.max(plant_data[[col]])]
})

# 转换为目标数据框
result_df <- data.frame(
  Sample = names(top_families),
  Top_Family = top_families,
  row.names = NULL
)

# 输出结果
print(result_df)

方法2:tidyverse风格实现

如果习惯用tidyverse工具链,可以通过数据重塑+分组筛选实现:

library(tidyverse)

result_df <- plant_data %>%
  # 将宽格式数据转为长格式,方便分组处理
  pivot_longer(cols = -Family, names_to = "Sample", values_to = "Reads") %>%
  # 按样本分组
  group_by(Sample) %>%
  # 筛选每组中读数最高的行(n=1确保只取一个最大值)
  slice_max(Reads, n = 1) %>%
  # 取消分组
  ungroup() %>%
  # 保留需要的列并重命名
  select(Sample, Top_Family = Family)

# 输出结果
print(result_df)

两种方法最终都会得到如下结构的结果数据框:

Sample Top_Family
1 Sample1 Asteraceae
2 Sample2 Asteraceae
3 Sample3 Poaceae

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 06:02:16