我对两种基因型进行了测序,并提取了相应的SNP芯片SNPs,将我们的基因型与完全相同基因型的公开数据进行了比较。我注意到一些SNP必须是相反的链极性,需要翻转。如何使用R检查样本调用是否与参考或备用SNP调用匹配,如果不匹配,则将样本调用替换为互补核苷酸?
我尝试将ifelse和chartr结合起来,但失败了。
示例数据
test <- data.frame("pos" = 1:5, "ref" = c("A", "T", "C", "C","G"), "alt" = c("G","C", "A", "T", "A"), "sample" = c("A", "A", "C", "G", "G"))
View(test)
+---------+------+-------+----------+
| pos | ref | alt | sample1 |
+---------+------+-------+----------+
| 1 | A | G | A |
| 2 | T | C | A |
| 3 | C | A | C |
| 4 | C | T | G |
| 5 | G | A | G |
+---------+------+-------+----------+期望输出
+---------+------+-------+----------+
| pos | ref | alt | sample1 |
+---------+------+-------+----------+
| 1 | A | G | A |
| 2 | T | C | T |
| 3 | C | A | C |
| 4 | C | T | C |
| 5 | G | A | G |
+---------+------+-------+----------+发布于 2019-03-26 04:32:24
您可以使用库dplyr来操作您的数据集。例如,使用mutate(),您可以检查示例调用是否与引用匹配。然后,您可以使用ifelse()进行一些更改。
library(dplyr)
test %>%
mutate(TEST1 = (ref == sample)) %>%
mutate(sample2 = ifelse(TEST1 == TRUE, ref, sample))
# pos ref alt sample TEST1
# 1 1 A G A TRUE
# 2 2 T C A FALSE
# 3 3 C A C TRUE
# 4 4 C T G FALSE
# 5 5 G A G TRUE发布于 2019-03-26 15:18:12
使用ifelse和chartr
ifelse(test$sample == test$ref, test$sample, chartr("ATCG", "TAGC", test$sample))
# [1] "A" "T" "C" "C" "G"发布于 2019-03-26 21:28:51
虽然你在R中寻求解决方案,但你仍然可能想要考虑其他工具来翻转链,特别是如果你需要在更大的规模上这样做的话。您可以使用Plink和许多其他工具来完成此任务。此外,我可能会从它们的记录/方法描述中确认公共数据中的链对齐。如果公共数据集中只有一些SNP被翻转/看起来是翻转的,这是可疑的(人们会认为来自同一来源的数据内的对齐是一致的)。此外,如果您使用位置参数,您应该在您的vs公共数据中确认基因组构建/版本,因为不同的版本也可能是混淆的来源。最后,我可能还想确保问题中的SNP不是多等位的,因为它也可能是分歧的来源。
https://stackoverflow.com/questions/55345770
复制相似问题