Search code examples
rrscript

How to use LOOP to simplify this R script code. It is a code for analysing a yearly data


I am analyzing a yearly dataset. I would like to reshape and rename the data. How could I use the LOOP to simplify the following code?

marryc2010 <- data.frame(date=c2010$Date,EC=c2010$`Elemental Carbon by transmittance-PM10`,OC=c2010$`Organic Carbon by transmittance-PM10`)
marryc2011 <- data.frame(date=c2011$Date,EC=c2011$`Elemental Carbon by transmittance-PM10`,OC=c2011$`Organic Carbon by transmittance-PM10`)
marryc2012 <- data.frame(date=c2012$Date,EC=c2012$`Elemental Carbon by transmittance-PM10`,OC=c2012$`Organic Carbon by transmittance-PM10`)
marryc2013 <- data.frame(date=c2013$Date,EC=c2013$`Elemental Carbon by transmittance-PM10`,OC=c2013$`Organic Carbon by transmittance-PM10`)
marryc2014 <- data.frame(date=c2014$Date,EC=c2014$`Elemental Carbon by transmittance-PM10`,OC=c2014$`Organic Carbon by transmittance-PM10`)
marryc2015 <- data.frame(date=c2015$Date,EC=c2015$`Elemental Carbon by transmittance-PM10`,OC=c2015$`Organic Carbon by transmittance-PM10`)
marryc2016 <- data.frame(date=c2016$Date,EC=c2016$`Elemental Carbon by transmittance-PM10`,OC=c2016$`Organic Carbon by transmittance-PM10`)
marryc2017 <- data.frame(date=c2017$Date,EC=c2017$`Elemental Carbon by transmittance-PM10`,OC=c2017$`Organic Carbon by transmittance-PM10`)
marryc2018 <- data.frame(date=c2018$Date,EC=c2018$`Elemental Carbon by transmittance-PM10`,OC=c2018$`Organic Carbon by transmittance-PM10`)
marryc2019 <- data.frame(date=c2019$Date,EC=c2019$`Elemental Carbon by transmittance-PM10`,OC=c2019$`Organic Carbon by transmittance-PM10`)

Solution

  • An easy way is to use purrr::map over your list of dataframes.

    library(purrr)
    library(dplyr)
    
    # Create a list of the dataframes, and return values as object names.
    df.list <- mget(paste0("c", 2010:2019))
    
    # Then, use map to extract the columns that you need from each dataframe.
    dfs.updated <-
      purrr::map(
        .x = df.list,
        .f = function(x) {
          x %>% dplyr::select(
            Date,
            `Elemental Carbon by transmittance-PM10`,
            `Organic Carbon by transmittance-PM10`
          )
        }
      )
    
    # Then, can rename if needed.
    names(dfs.updated) <- paste0("marry", 2010:2019)