如何从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
相关产品推荐
相关产品推荐

