I want to find all experiments in GEO that are associated with a drug (for example tolvaptan). Is there any quick and scalable way to to this? I want to query more than 100 drugs.

I tried to use bioDBnet to map Drug Bank ID to look up data sets, but I don't know what output format should I select.

  • $\begingroup$ I'd say the quickest way is simply to search GEO datasets at the NCBI with the drug name. Did you have some kind of programmatic pipeline in mind? $\endgroup$
    – neilfws
    Jun 15 '17 at 13:23
  • $\begingroup$ there are more than 100 drugs, so a faster method would help. $\endgroup$
    – hhoomn
    Jun 15 '17 at 13:24
  • 2
    $\begingroup$ Then I'd suggest programmatic search of GEO using the EUtils API. Happy to post an answer based on that if it would help? (will have to wait a few hours though) $\endgroup$
    – neilfws
    Jun 15 '17 at 13:26
  • 1
    $\begingroup$ @hhoomn Welcome to our community. I tried to add the scalability requirement to the question. Feel free to improve it. Generally we are trying to keep all questions precise, therefore do not hesitate to add further specifications directly into question instead of comments. $\endgroup$
    – Kamil S Jaron
    Jun 15 '17 at 17:52
  • 1
    $\begingroup$ It would also be useful to see some example input (presumably a list of DrugBank IDs?) and some idea of the desired output (GEO dataset IDs, or summaries?) $\endgroup$
    – neilfws
    Jun 15 '17 at 21:04

You could take a look at the rentrez package for R. You can use the entrez_search function to get the GEO IDs for the studies related to your query, and then the entrez_summary function for the results. So, for example:

x <- rentrez::entrez_search(db="gds", term=paste0("tolvaptan AND gse[ETYP]"),
                            use_history = T)
res <- rentrez::entrez_summary(db="gds", id=x$ids)

Where res will be a list containing objects of the esummary class. Then, you can use the following line to get the GSE accession numbers related to tolvaptan:

lapply(res, `[[`, "gse")    

So you could put this function in a loop replacing "tolvaptan" with your drugs:

drugs <- c("drugA", "drugB", "drugC")
for(drug in drugs){
    x <- rentrez::entrez_search(db="gds", term=paste0(drug, " AND gse[ETYP]"))
    res <- rentrez::entrez_summary(db="gds", id=x$ids)
    lapply(res, `[[`, "gse")     

Take a look at the rentrez documentation for more details.


One of the problems I've found with GEO and even ArrayExpress is that it seems like there are tons of false positives that come up in the search. Additionally, there may be a ton of results that you miss because you didn't include the synonym of the drug.

In order to make sure I have all the information relating to name, etc, you can write a script which downloads the result of a search in PubChem (this can be done with drugbank as well I think) and then parse the search result, extracting important information such as synonyms of drug name.

Finally, take those synonyms and use them in an Entrez (EUtils) search for the experiments. Then try to filter the results to keep only what you're actually looking for. One bad way to do this is just by making sure the experiment summary contains the term your looking for. Another way to potentially do this, for example if there is a large experiment which tests serveral different factors is to programmatically search through associated files to ensure they contain a desired keyword.

You'll get different experiment types and so the files associated with the results will depend on the type of experiment in the search result.

When you get have a list of IDs of the experiments you want, you can feed them through to GEOquery in Bioconductor.


I would recommend using GEOmetadb from Bioconductor. GEOmetadb is a simple wrapper that will download an up-to-date SQLite database with the metadata for all entities in GEO. You can then use your favorite SQL client to query the database quickly, since it's offline, refining your search as you go.

  • $\begingroup$ Welcome to the site. Although the recommendation is useful how does GEOmetadb could be used to download GEO data associated with a drug? $\endgroup$
    – llrs
    Sep 22 '18 at 10:48
  • $\begingroup$ GEOmetadb will allow you to do fast full text search searches so you could search all GSEs for specific drug names or drug ids. $\endgroup$
    – Breck
    Sep 25 '18 at 2:05

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.