我有一个令人费解的问题,我希望我能简单地解释一下......
我有以下数据:
CHROM POS REF SNP INDEL
5 290 A --|T|--|-- 0
5 890 A A|T|--|G 0
7 672 A A|--|C|-- +C,+CC
9 459 G A|T|--|G -C
我想创建一个 ALT 变量,以便最终可以通过 VCFtools 运行它。但是,当且仅当满足某个语句时,我不完全确定如何通过不断添加变量来创建变量。
例如:
第一列很简单,ALT只有T;但是我只想在 ALT 列中粘贴 T,而不添加“|” 或者 ” - ”。第二个略有不同,我不想将 A 添加到 ALT 变量中,只是因为它在 SNP 条目下可见,而是添加了 T 和 G,由一列分隔。
所以本质上,我只想将每个字母添加到 ALT 变量中,前提是它不等于 REF 变量并且它不等于“--”。
我已经将 SNP 列拆分如下:
m$A <- sapply(strsplit(as.character(mito$SNP),"\\|"),function(x) x[1])
m$T <- sapply(strsplit(as.character(mito$SNP),"\\|"),function(x) x[2])
m$C <- sapply(strsplit(as.character(mito$SNP),"\\|"),function(x) x[3])
m$G <- sapply(strsplit(as.character(mito$SNP),"\\|"),function(x) x[4])
但是从这里有点卡住了。我也有“+C,+CC”和“-C”的问题......对于这些,SNP列中的字母被忽略但REF和ALT变为:“A”和“AC,ACC”和分别为“GC”和“G”。我也把它分开了:
m$indel1 <- sapply(strsplit(as.character(mito$INDEL),","),function(x) x[1])
m$indel2 <- sapply(strsplit(as.character(mito$INDEL),","),function(x) x[2])
如果这真的没有意义;这是我希望不同的选项:
CHROM POS REF SNP INDEL ALT
5 290 A --|T|--|-- 0 T
5 890 A A|T|--|G 0 T,G
7 672 A A|--|C|-- +C,+CC AC,ACC
9 459 GC A|T|--|G -C G
我只包含了上面的例子,但文件中有所有不同的组合。这可以在 R 中完成,还是会变得非常复杂。
提前谢谢...
注1:
首先,如果我在上面的查询中不清楚这一点,我们深表歉意。并感谢那些迄今为止提供帮助的人。根据要求,INDEL 的 ALT 变量将根据 INDEL 前面是否有“-”号或“+”号而改变(即,这不会遵循与 SNP 相同的规则,后者将是大多数行)。
例如:
“-C”(或任何有“-”符号的地方),如上所述,REF 需要变为 REF+INDEL,ALT 变为 REF(如果需要,用逗号分隔):
CHROM POS REF SNP INDEL ALT 9 459 GC A|T|--|G -C G
如果有“+”号(无论是 +C、+CC 还是 +GGG 或其他),REF 保持不变,但 ALT 变为 REF+INDEL(如果需要,用逗号分隔):
CHROM POS REF SNP INDEL ALT 7 672 A A|--|C|-- +C,+CC AC,ACC 9 987 T --|T|C|-- +GGG TGGG