在R语言中合并Excel文件中符合条件的行
Python解决方案(pandas)
如果习惯用Python处理数据,以下是等效实现:
import pandas as pd # 读取Excel文件,替换为你的文件路径 df = pd.read_excel("your_metabolite_data.xlsx") # 定义分组合并函数 def merge_rrt_subgroup(group): # 按RRT排序,确保连续比较 sorted_group = group.sort_values(by="RRT") # 计算相邻RRT差值,生成合并组ID rrt_diff = sorted_group["RRT"].diff().fillna(0) sorted_group["merge_group"] = (rrt_diff > 0.05).cumsum() # 定义聚合规则:前四列取均值,样本列取均值(可修改) agg_rules = { "Mass": lambda x: x.mean(skipna=True), "RT": lambda x: x.mean(skipna=True), "RRT": lambda x: x.mean(skipna=True) } # 自动匹配所有样本列,添加聚合规则 sample_cols = [col for col in df.columns if col not in ["Metabolite", "Mass", "RT", "RRT"]] for col in sample_cols: agg_rules[col] = lambda x: x.mean(skipna=True) # 分组聚合 merged_subgroup = sorted_group.groupby("merge_group").agg(agg_rules).reset_index(drop=True) # 补充Metabolite列 merged_subgroup["Metabolite"] = group.name # 恢复原列顺序 return merged_subgroup[df.columns] # 按Metabolite分组执行合并 merged_df = df.groupby("Metabolite").apply(merge_rrt_subgroup).reset_index(drop=True) # 导出结果 merged_df.to_excel("merged_metabolite_data.xlsx", index=False)
关键说明
- 若之前仅得到少量代谢物,可能是未按Metabolite分组就直接处理RRT差值,导致跨代谢物错误合并;上述代码严格按Metabolite分组,确保合并仅发生在同一名下的代谢物中。
- 样本列匹配逻辑可优化:如果样本列有统一前缀(如
Sample_),可将sample_cols生成逻辑改为sample_cols = [col for col in df.columns if col.startswith("Sample_")]。
内容的提问来源于stack exchange,提问作者bini
相关产品推荐
相关产品推荐

