But first a bit of explanations for people not used to working with geological ages. GPTS stands for geomagnetic polarity time scale. As mentioned in a previous blogpost, putting an actual numeric age on a sample is not trivial and in most cases we end up building ages models using stratigraphic data calibrated on different sites where they've been compared to the magnetostratigraphic record. That record itself is also something that is being calibrated (in the case of the C part of the scale, based on the Atlantic seafloor), and this calibrations are occasionally updated, most famously in the serie of book "The Geological Timescale" of which the 2020 edition is the latest update.
As biostratigraphic events calibrated on the GPTS are expressed linearly on it, switching from one scale to another is just a matter of linear interpolation (see here my answer on ResearchGate):
With an example: in Agnini et al 2014, the LAD of Discoaster lodoensis was calibrated at 48.37Ma on the 1995 GPTS. It is thus between the bottom of C21n (47.906Ma) and the top of C22n (49.037Ma). On the 2020 GPTS, those chron boundaries are at 47.760 and 48.878Ma respectively. The mapped age of the LAD of Discoaster lodoensis on the 2020 GPTS is thus (by linear interpolation): 47.760 + (48.37-47.906)*(47.906-47.760)/(49.037-48.878) = 48.18606 Ma
In practice however this is very tedious to do on a large amount of data. Hence this function I wrote some time ago in my package NSBcompanion, called
changeAgeScale. It does require a user account to NSB (though in practice people can use the guest account mentioned in the help pages of the package).
library(NSBcompanion) nsb <- nsbConnect("guest","arm_aber_sexy") #Connect to the database in order to access the various GPTS data old_ages <- c(0,1,2,3,4,5) changeAgeScale(nsb, old_ages, from="CK95", to="GTS2020")
For the list of available GPTS and their abbreviations, see the help page of the NSB website.