How to download IMF data with Rstudio IMFR Package

You can use the imf_data function to download the data the IMF makes available via its API. To do this you will need at least the following information:

database_id: the ID of the specific database you wish to download the data series from. You can find the list of IDs and their description using the imf_ids function.

indicator: the IMF indicators of the variables you want to download. One way to find these is to:

Use the database_id for the database you want to access with the imf_codelist function to find the code list of the database.

Then using the indicator code (usually CL_INDICATOR_database_id) in imf_codes, you can find the data series indicator codes in that database.

Tip: if you have a number of country identifiers that are not in ISO2C format, you can use the helpful countrycode package to convert them.

country: one or more ISO two letter country codes for the countries you would like to download the data for. If country = ‘all’ then all available countries will be downloaded.

start and end: the start and end years for which you would like to download the data.

freq: the frequency of the series you want to download. Often series are available annually, quarterly, and monthly.

Examples

Simple Country-Time-Variable

Imagine that we want to download Effective Exchange Rate (CPI base) for China and the UK for 2013:

Installation of imfr Package

install.packages(“imfr”)

Loading the library of imfr Package

library(imfr)

Query for data real effective exchange rate annual data extraction from 2013

real_ex <- imf_data(database_id = ‘IFS’, indicator = ‘EREER_IX’, country = c(‘CN’, ‘GB’), freq = ‘A’, start = 2013, end = current_year()) real_ex

More complex data formats

While many quantities of interest from the IMF database are in simple country-time-variable format, many are not.

For example, Direction of Trade Statistics include country-year-variable and a “counterpart area”. By default, imf_data would only return the first, but not the last.

Because of the many possible data structures available from the imf, imf_data allows you to return the entire API call as a list. From this list you can then extract the requested data. To do this use the return_raw = TRUE argument, e.g.:

data_list <- imf_data(database_id = “DOT”, indicator = “TXG_FOB_USD”, country = “US”, return_raw = TRUE)

Then extract the data series (it is typically contained in CompactData\(DataSet\)Series):

data_df <- data_list\(CompactData\)DataSet$Series

names(data_df)

LS0tDQp0aXRsZTogIklNRiBEYXRhIEV4dHJhY3Rpb24jUlN0dWRpbyNJTUZSI1BhY2thZ2UiDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQojIEhvdyB0byBkb3dubG9hZCBJTUYgZGF0YSB3aXRoIFJzdHVkaW8gSU1GUiBQYWNrYWdlDQoNCiMjIyBZb3UgY2FuIHVzZSB0aGUgaW1mX2RhdGEgZnVuY3Rpb24gdG8gZG93bmxvYWQgdGhlIGRhdGEgdGhlIElNRiBtYWtlcyBhdmFpbGFibGUgdmlhIGl0cyBBUEkuIFRvIGRvIHRoaXMgeW91IHdpbGwgbmVlZCBhdCBsZWFzdCB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOg0KDQojIyMgZGF0YWJhc2VfaWQ6IHRoZSBJRCBvZiB0aGUgc3BlY2lmaWMgZGF0YWJhc2UgeW91IHdpc2ggdG8gZG93bmxvYWQgdGhlIGRhdGEgc2VyaWVzIGZyb20uIFlvdSBjYW4gZmluZCB0aGUgbGlzdCBvZiBJRHMgYW5kIHRoZWlyIGRlc2NyaXB0aW9uIHVzaW5nIHRoZSBpbWZfaWRzIGZ1bmN0aW9uLg0KDQojIyMgaW5kaWNhdG9yOiB0aGUgSU1GIGluZGljYXRvcnMgb2YgdGhlIHZhcmlhYmxlcyB5b3Ugd2FudCB0byBkb3dubG9hZC4gT25lIHdheSB0byBmaW5kIHRoZXNlIGlzIHRvOg0KDQojIyMgVXNlIHRoZSBkYXRhYmFzZV9pZCBmb3IgdGhlIGRhdGFiYXNlIHlvdSB3YW50IHRvIGFjY2VzcyB3aXRoIHRoZSBpbWZfY29kZWxpc3QgZnVuY3Rpb24gdG8gZmluZCB0aGUgY29kZSBsaXN0IG9mIHRoZSBkYXRhYmFzZS4NCg0KIyMjIFRoZW4gdXNpbmcgdGhlIGluZGljYXRvciBjb2RlICh1c3VhbGx5IENMX0lORElDQVRPUl9kYXRhYmFzZV9pZCkgaW4gaW1mX2NvZGVzLCB5b3UgY2FuIGZpbmQgdGhlIGRhdGEgc2VyaWVzIGluZGljYXRvciBjb2RlcyBpbiB0aGF0IGRhdGFiYXNlLg0KDQojIyMgVGlwOiBpZiB5b3UgaGF2ZSBhIG51bWJlciBvZiBjb3VudHJ5IGlkZW50aWZpZXJzIHRoYXQgYXJlIG5vdCBpbiBJU08yQyBmb3JtYXQsIHlvdSBjYW4gdXNlIHRoZSBoZWxwZnVsIGNvdW50cnljb2RlIHBhY2thZ2UgdG8gY29udmVydCB0aGVtLg0KDQojIyMgY291bnRyeTogb25lIG9yIG1vcmUgSVNPIHR3byBsZXR0ZXIgY291bnRyeSBjb2RlcyBmb3IgdGhlIGNvdW50cmllcyB5b3Ugd291bGQgbGlrZSB0byBkb3dubG9hZCB0aGUgZGF0YSBmb3IuIElmIGNvdW50cnkgPSAnYWxsJyB0aGVuIGFsbCBhdmFpbGFibGUgY291bnRyaWVzIHdpbGwgYmUgZG93bmxvYWRlZC4NCg0KIyMjIHN0YXJ0IGFuZCBlbmQ6IHRoZSBzdGFydCBhbmQgZW5kIHllYXJzIGZvciB3aGljaCB5b3Ugd291bGQgbGlrZSB0byBkb3dubG9hZCB0aGUgZGF0YS4NCg0KIyMjIGZyZXE6IHRoZSBmcmVxdWVuY3kgb2YgdGhlIHNlcmllcyB5b3Ugd2FudCB0byBkb3dubG9hZC4gT2Z0ZW4gc2VyaWVzIGFyZSBhdmFpbGFibGUgYW5udWFsbHksIHF1YXJ0ZXJseSwgYW5kIG1vbnRobHkuDQoNCiMjIEV4YW1wbGVzDQojIyBTaW1wbGUgQ291bnRyeS1UaW1lLVZhcmlhYmxlDQojIyMgSW1hZ2luZSB0aGF0IHdlIHdhbnQgdG8gZG93bmxvYWQgRWZmZWN0aXZlIEV4Y2hhbmdlIFJhdGUgKENQSSBiYXNlKSBmb3IgQ2hpbmEgYW5kIHRoZSBVSyBmb3IgMjAxMzoNCg0KIyMgSW5zdGFsbGF0aW9uIG9mIGltZnIgUGFja2FnZQ0KDQppbnN0YWxsLnBhY2thZ2VzKCJpbWZyIikNCg0KIyMgTG9hZGluZyB0aGUgbGlicmFyeSBvZiBpbWZyIFBhY2thZ2UNCg0KDQpsaWJyYXJ5KGltZnIpDQoNCiMjIFF1ZXJ5IGZvciBkYXRhIHJlYWwgZWZmZWN0aXZlIGV4Y2hhbmdlIHJhdGUgYW5udWFsIGRhdGEgZXh0cmFjdGlvbiBmcm9tIDIwMTMNCg0KcmVhbF9leCA8LSBpbWZfZGF0YShkYXRhYmFzZV9pZCA9ICdJRlMnLCBpbmRpY2F0b3IgPSAnRVJFRVJfSVgnLA0KICAgICAgICAgICAgICAgICAgICBjb3VudHJ5ID0gYygnQ04nLCAnR0InKSwgZnJlcSA9ICdBJywNCiAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSAyMDEzLCBlbmQgPSBjdXJyZW50X3llYXIoKSkNCnJlYWxfZXgNCg0KDQojIE1vcmUgY29tcGxleCBkYXRhIGZvcm1hdHMNCg0KIyMjIFdoaWxlIG1hbnkgcXVhbnRpdGllcyBvZiBpbnRlcmVzdCBmcm9tIHRoZSBJTUYgZGF0YWJhc2UgYXJlIGluIHNpbXBsZSBjb3VudHJ5LXRpbWUtdmFyaWFibGUgZm9ybWF0LCBtYW55IGFyZSBub3QuIA0KDQojIyMgRm9yIGV4YW1wbGUsIERpcmVjdGlvbiBvZiBUcmFkZSBTdGF0aXN0aWNzIGluY2x1ZGUgY291bnRyeS15ZWFyLXZhcmlhYmxlIGFuZCBhICJjb3VudGVycGFydCBhcmVhIi4gQnkgZGVmYXVsdCwgaW1mX2RhdGEgd291bGQgb25seSByZXR1cm4gdGhlIGZpcnN0LCBidXQgbm90IHRoZSBsYXN0Lg0KDQojIyMgQmVjYXVzZSBvZiB0aGUgbWFueSBwb3NzaWJsZSBkYXRhIHN0cnVjdHVyZXMgYXZhaWxhYmxlIGZyb20gdGhlIGltZiwgaW1mX2RhdGEgYWxsb3dzIHlvdSB0byByZXR1cm4gdGhlIGVudGlyZSBBUEkgY2FsbCBhcyBhIGxpc3QuIEZyb20gdGhpcyBsaXN0IHlvdSBjYW4gdGhlbiBleHRyYWN0IHRoZSByZXF1ZXN0ZWQgZGF0YS4gVG8gZG8gdGhpcyB1c2UgdGhlIHJldHVybl9yYXcgPSBUUlVFIGFyZ3VtZW50LCBlLmcuOg0KDQpkYXRhX2xpc3QgPC0gaW1mX2RhdGEoZGF0YWJhc2VfaWQgPSAiRE9UIiwgaW5kaWNhdG9yID0gIlRYR19GT0JfVVNEIiwgDQogICAgICAgICAgICAgICAgICAgICAgY291bnRyeSA9ICJVUyIsIHJldHVybl9yYXcgPSBUUlVFKQ0KICAgICAgICAgICAgICAgICAgICAgIA0KIyMjIFRoZW4gZXh0cmFjdCB0aGUgZGF0YSBzZXJpZXMgKGl0IGlzIHR5cGljYWxseSBjb250YWluZWQgaW4gQ29tcGFjdERhdGEkRGF0YVNldCRTZXJpZXMpOg0KDQpkYXRhX2RmIDwtIGRhdGFfbGlzdCRDb21wYWN0RGF0YSREYXRhU2V0JFNlcmllcw0KDQpuYW1lcyhkYXRhX2RmKQ0K