vt decompose拆分多等位位点后median_DP未拆分的处理方法求助
方案1:单行awk命令实现(最便捷,无需额外依赖)
逻辑:以chr + pos + ref作为唯一分组标识,每个分组内按alt出现顺序对应DP列表的下标即可实现自动匹配,命令如下:
awk 'BEGIN{FS=OFS="\t"} NR==1{print; next} {key=$1"_"$2"_"$3"_"$4} !(key in dp_arr){split($6, dp_arr[key], ","); cnt[key]=0} {cnt[key]++; print $1,$2,$3,$4,$5, dp_arr[key][cnt[key]]}' your_input.tsv > output.tsv
参数说明:
- 假设你的输入是制表符分隔的TSV文件,前5列对应Chr、pos、其他位置标识、ref、alt,第6列为median DP的逗号分隔字符串
- 自动为每个新位点拆分DP值存入数组,同一位点的多个alt按出现顺序依次取对应下标的DP值,支持最多46个等位位点的场景
- 如果你的输入是多空格分隔的格式,把BEGIN块的
FS=OFS="\t"改为FS="[[:space:]]+"即可适配
方案2:Python Pandas实现(可读性更高,方便后续扩展其他处理)
如果需要后续继续处理变异数据,用pandas的分组操作更直观:
import pandas as pd # 读取输入表,列名可根据你的实际字段调整 df = pd.read_csv("your_input.tsv", sep="\t") # 分组处理:每个位点按alt顺序提取对应DP def extract_dp(group): dp_list = group["median DP"].iloc[0].split(",") group["median DP"] = dp_list[:len(group)] return group df = df.groupby(["Chr", "pos", "ref"], group_keys=False).apply(extract_dp) # 输出结果 df.to_csv("output.tsv", sep="\t", index=False)
两种方案都可以直接适配你给出的示例数据,输出结果和你需要的目标格式完全一致。
内容的提问来源于stack exchange,提问作者hmc
相关产品推荐
相关产品推荐

