<p>Did you try the <a href="http://genome.ucsc.edu/cgi-bin/hgLiftOver" rel="nofollow noreferrer">liftOver</a> tool of UCSC? You'll need a BED file with your SNPs coordinates for this.</p>

<p>You can also do this in <code>R</code> with <code>rtracklayer</code>.</p>

<pre><code>library(rtracklayer)
?liftOver
</code></pre>

CC BY-SA 3.0
2017-12-19T10:15:02.350Z
There's no need to change the coordinates, the question is regarding the IDs themselves.
Devon Ryan
CC BY-SA 3.0
2017-12-19T10:23:22.383Z
What I have is a  list of dbSNP IDs. I have downloaded source("http://bioconductor.org/workflows.R") workflowInstall("liftOver"), but not sure if ths will accept just a list of IDs.
Rob John
CC BY-SA 3.0
2017-12-19T11:29:08.030Z
No it won't accept only rsIDs, so you'll need to get the coordinates first with e.g., biomaRt. Sorry I understood that you had coordinates of the SNPs.
benn
CC BY-SA 3.0
2017-12-27T16:21:19.947Z
Thanks @b.nota I was able to get coordinates from biomaRT.
Rob John
CC BY-SA 3.0
2017-12-19T10:10:16.333Z
2017-12-19T10:10:16.333Z
benn
<p>You can assume that the overwhelming majority of rsIDs are the same between GRCh37 and GRCh38 (they're semi-stable IDs). There are, however, a number of rsIDs that are present only in GRCh37, which <a href="ftp://ftp.ncbi.nih.gov/snp/organisms/human_9606/known_issues/b150_rs_without_GRCh38_mapping.bcp" rel="noreferrer">you can find here</a>. Note that the format of this file is a bit strange, it's <code>chromosome|position|ID|weight</code>, where <code>position</code> is sometimes empty, <code>weight</code> is typically 1, and <code>ID</code> is the rsID without the <code>rs</code> prefix.</p>

<p>Also, <a href="ftp://ftp.ncbi.nih.gov/snp/organisms/human_9606/known_issues/b150_rs_GRCh37_to_GRCh38_orientation_flip.bcp" rel="noreferrer">some rsIDs have a different strand</a>. This is less likely to be an issue for you, but it's there in case you need it.</p>

CC BY-SA 3.0
2017-12-27T16:23:14.297Z
Thanks so much @Devon Ryan for all the useful information.
Rob John
CC BY-SA 3.0
2017-12-19T11:13:24.153Z
2017-12-19T11:13:24.153Z
Devon Ryan
<p>See also CrossMap:
<a href="http://crossmap.sourceforge.net/" rel="nofollow noreferrer">http://crossmap.sourceforge.net/</a></p>

<p>20, 21, 22, 23, 24, 30</p>

CC BY-SA 3.0
2017-12-19T10:26:32.193Z
2017-12-19T10:26:32.193Z
Dan
<p>These are only the base positions that have changed between GRCh37 and GRCh38, not the IDs. For example if a study (e.g. found via pubmed) refers to a particular rsID, the genome build does not matter.</p>
<p>rsIDs do not depend on a reference genome. They point to a specified locus regardless of the differences in genomic assemblies. As a result, you cannot convert rsIDs of one genome build to rsIDs of another build. And there is no such mapping tool available, even if they pretend to be. rsIDs are assigned by dbSNP maintainers, and are stable. The numbers may only change on merge, where multiple numbers were assigned at the same genomic location, and the higher number gets merged into a lower number by the dbSNP maintainers, unless there is a very well-published, notable rsID mentioned in the press, in this case that merged number is considered the mentioned one, not the smaller one.</p>
<blockquote>
<p><a href="https://www.ncbi.nlm.nih.gov/snp/docs/RefSNP_about/" rel="nofollow noreferrer">RefSNP number is the stable accession regardless of the differences in genomic assemblies.</a></p>
</blockquote>
<p>For more information go to the “RefSNP Number Stability” section at <a href="https://www.ncbi.nlm.nih.gov/books/NBK21088/" rel="nofollow noreferrer">https://www.ncbi.nlm.nih.gov/books/NBK21088/</a></p>
<p>The rsIDs may also be deleted in some cases see the following links on the explanation:</p>
<ul>
<li><a href="https://www.ncbi.nlm.nih.gov/books/NBK44467/#Build.i_found_rs123456_in_the_current_bu" rel="nofollow noreferrer">https://www.ncbi.nlm.nih.gov/books/NBK44467/#Build.i_found_rs123456_in_the_current_bu</a></li>
<li><a href="https://www.ncbi.nlm.nih.gov/books/NBK44468/#Build.the__rscurrent_field_in_rsmergearc" rel="nofollow noreferrer">https://www.ncbi.nlm.nih.gov/books/NBK44468/#Build.the__rscurrent_field_in_rsmergearc</a></li>
</ul>
<p>Thus, specifying the location by rsID is stable, and can be only affected by an eventual merge or delete from the dbSNP database, if any, not by a new genome build. You can only “update” the rsIDs from time to time to make sure they all are the main rsID, not those larger numbers already merged to a smaller one. It should be noted that the base positions (offsets) of the same genomic location may change between the builds of the reference genome. And they did surely change between GRCh37 and GRCh38.</p>
<p>If your list is relatively small, you can get most recent rsIDs for your chromosome and offset via dbSNP API. It is available at <a href="https://www.ncbi.nlm.nih.gov/snp/docs/eutils_help/" rel="nofollow noreferrer">https://www.ncbi.nlm.nih.gov/snp/docs/eutils_help/</a></p>
<p>The query for the API is the same as for the “advanced search” of dbSNP at <a href="https://www.ncbi.nlm.nih.gov/snp/advanced" rel="nofollow noreferrer">https://www.ncbi.nlm.nih.gov/snp/advanced</a></p>
<p>If you specify data in a “Base Position” line, it will look for GRCh38 base position. If you need to specify the base position for a GRCh37, use “Base Position Previous” line. You may also need to add <code>NOT MergedRS[All Fields]</code> to exclude rsIDs that have already been merged.</p>
<p>For example, to get the rsID for a chromosome 1 GRCh37 base position 249222527, the API query URL is the following <a href="https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=snp&amp;term=1%5BChromosome%5D+AND+249222527%5BBase+Position+Previous%5D+NOT+MergedRS%5BAll+Fields%5D" rel="nofollow noreferrer">https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=snp&amp;term=1[Chromosome]+AND+249222527[Base+Position+Previous]+NOT+MergedRS[All+Fields]</a></p>
<p>You can do queries from a script if the number of requests is relatively small. You may find a perl script, for example, that does the job.</p>
<p>Even though the rsID numbers can be merged or deleted, and the changes are reflected in a new dbSNP database build, given the fact that the changes in numbers do not depend on the genome build, is better to always rely to the rsID number from the latest dbSNP database build.</p>
<p>The changes in rsID numbers are changed due to merges or deletions between dbSNP builds relatively infrequently, given the total number of the IDs in the database.</p>

CC BY-SA 4.0
2020-08-20T20:26:13.350Z
2020-08-22T17:27:17.867Z
2020-08-22T17:27:17.867Z
Maxim Masiutin
<p>I have a list of dbSNP rsIDs for GRCh37 and I want to convert them to the equivalent IDs in GRCh38. This is using the most recent dbSNP build (150 as of the time of this post). Is there any ID mapping available? If not, are there any tools I can use?</p>

<snp><plink><phylogenetics>
Convert rs ID of one hg build to rs IDs of another build
# Convert rs ID of one hg build to rs IDs of another build

(Asked by: username_0 on 2017-12-17)

I have a list of dbSNP rsIDs for GRCh37 and I want to convert them to the equivalent IDs in GRCh38. This is using the most recent dbSNP build (150 as of the time of this post). Is there any ID mapping available? If not, are there any tools I can use?

**Tags:** snp, plink, phylogenetics

---

## 4 answers

### Answer by username_1 on 2017-12-19. Score: 2 | Accepted answer

Did you try the liftOver tool of UCSC? You'll need a BED file with your SNPs coordinates for this.
You can also do this in R with rtracklayer.
library(rtracklayer)
?liftOver

> **Comments:**
> **username_2**: There's no need to change the coordinates, the question is regarding the IDs themselves.  
> **username_0**: What I have is a  list of dbSNP IDs. I have downloaded source("http://bioconductor.org/workflows.R") workflowInstall("liftOver"), but not sure if ths will accept just a list of IDs.  
> **username_1**: No it won't accept only rsIDs, so you'll need to get the coordinates first with e.g., biomaRt. Sorry I understood that you had coordinates of the SNPs.  
> **username_0**: Thanks @b.nota I was able to get coordinates from biomaRT.  

---

### Answer by username_2 on 2017-12-19. Score: 5

You can assume that the overwhelming majority of rsIDs are the same between GRCh37 and GRCh38 (they're semi-stable IDs). There are, however, a number of rsIDs that are present only in GRCh37, which [you can find here](ftp://ftp.ncbi.nih.gov/snp/organisms/human_9606/known_issues/b150_rs_without_GRCh38_mapping.bcp). Note that the format of this file is a bit strange, it's `chromosome|position|ID|weight`, where `position` is sometimes empty, `weight` is typically 1, and `ID` is the rsID without the `rs` prefix.

Also, [some rsIDs have a different strand](ftp://ftp.ncbi.nih.gov/snp/organisms/human_9606/known_issues/b150_rs_GRCh37_to_GRCh38_orientation_flip.bcp). This is less likely to be an issue for you, but it's there in case you need it.

> **Comments:**
> **username_0**: Thanks so much @Devon Ryan for all the useful information.  

---

### Answer by username_3 on 2017-12-19. Score: 1

See also CrossMap:
<http://crossmap.sourceforge.net/>

20, 21, 22, 23, 24, 30


---

### Answer by username_4 on 2020-08-20. Score: 0

These are only the base positions that have changed between GRCh37 and GRCh38, not the IDs. For example if a study (e.g. found via pubmed) refers to a particular rsID, the genome build does not matter.

rsIDs do not depend on a reference genome. They point to a specified locus regardless of the differences in genomic assemblies. As a result, you cannot convert rsIDs of one genome build to rsIDs of another build. And there is no such mapping tool available, even if they pretend to be. rsIDs are assigned by dbSNP maintainers, and are stable. The numbers may only change on merge, where multiple numbers were assigned at the same genomic location, and the higher number gets merged into a lower number by the dbSNP maintainers, unless there is a very well-published, notable rsID mentioned in the press, in this case that merged number is considered the mentioned one, not the smaller one.

> [RefSNP number is the stable accession regardless of the differences in genomic assemblies.](https://www.ncbi.nlm.nih.gov/snp/docs/RefSNP_about/)

For more information go to the “RefSNP Number Stability” section at <https://www.ncbi.nlm.nih.gov/books/NBK21088/>

The rsIDs may also be deleted in some cases see the following links on the explanation:

* <https://www.ncbi.nlm.nih.gov/books/NBK44467/#Build.i_found_rs123456_in_the_current_bu>
* <https://www.ncbi.nlm.nih.gov/books/NBK44468/#Build.the__rscurrent_field_in_rsmergearc>

Thus, specifying the location by rsID is stable, and can be only affected by an eventual merge or delete from the dbSNP database, if any, not by a new genome build. You can only “update” the rsIDs from time to time to make sure they all are the main rsID, not those larger numbers already merged to a smaller one. It should be noted that the base positions (offsets) of the same genomic location may change between the builds of the reference genome. And they did surely change between GRCh37 and GRCh38.

If your list is relatively small, you can get most recent rsIDs for your chromosome and offset via dbSNP API. It is available at <https://www.ncbi.nlm.nih.gov/snp/docs/eutils_help/>

The query for the API is the same as for the “advanced search” of dbSNP at <https://www.ncbi.nlm.nih.gov/snp/advanced>

If you specify data in a “Base Position” line, it will look for GRCh38 base position. If you need to specify the base position for a GRCh37, use “Base Position Previous” line. You may also need to add `NOT MergedRS[All Fields]` to exclude rsIDs that have already been merged.

For example, to get the rsID for a chromosome 1 GRCh37 base position 249222527, the API query URL is the following [https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=snp&term=1[Chromosome]+AND+249222527[Base+Position+Previous]+NOT+MergedRS[All+Fields]](https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=snp&term=1%5BChromosome%5D+AND+249222527%5BBase+Position+Previous%5D+NOT+MergedRS%5BAll+Fields%5D)

You can do queries from a script if the number of requests is relatively small. You may find a perl script, for example, that does the job.

Even though the rsID numbers can be merged or deleted, and the changes are reflected in a new dbSNP database build, given the fact that the changes in numbers do not depend on the genome build, is better to always rely to the rsID number from the latest dbSNP database build.

The changes in rsID numbers are changed due to merges or deletions between dbSNP builds relatively infrequently, given the total number of the IDs in the database.


---

