



    dtt <- data.table(data)

    # non value columns, ie, the columns to keep post reshape
    nvc <- c("Name","Code", "CURRENCY")

    # name of columns being transformed 
    dateCols <- setdiff(names(data), nvc)

    # use rbind list to combine subsets
    dtt2 <- rbindlist(lapply(dateCols, function(d) {
        dtt[, Date := d]
        cols <- c(nvc, "Date", d)
        setnames(dtt[, cols, with=FALSE], cols, c(nvc, "Date", "value"))
    }))

    ## Results: 

    dtt2
    #       Name Code CURRENCY         Date value
    # 1: Abengoa 4256      USD X_01_01_1980  1.53
    # 2:  Adidas 6783      USD X_01_01_1980  0.23
    # 3: Abengoa 4256      USD X_02_01_1980  1.54
    # 4:  Adidas 6783      USD X_02_01_1980  0.54
    # 5: Abengoa 4256      USD X_03_01_1980  1.51
    # 6:  Adidas 6783      USD X_03_01_1980  0.61
    # 7: Abengoa 4256      USD X_04_01_1980  1.52
    # 8:  Adidas 6783      USD X_04_01_1980  0.62

--------

    # Sample Data # 
        data <- read.table(text=
        "Name     Code  CURRENCY  _01_01_1980   _02_01_1980   _03_01_1980   _04_01_1980
        Abengoa  4256  USD        1.53         1.54         1.51         1.52      
        Adidas   6783  USD        0.23         0.54         0.61         0.62   ", header=TRUE)


----------
----------

## Benchmarks

     Resh <- quote(reshape::melt(data,id=c("Name","Code", "CURRENCY"),variable_name="Date"))
     Resh2 <- quote(reshape2::melt(data,id=c("Name","Code", "CURRENCY"),variable_name="Date"))
     DT <- quote(rbindlist(lapply(dateCols, function(d) { dtt[, Date := d]; cols <- c(nvc, "Date", d); setnames(dtt[, cols, with=FALSE], cols, c(nvc, "Date", "value"))})))

     benchmark(Resh=eval(Resh),Resh2=eval(Resh2),DT=eval(DT), replications=1e3, columns=c("relative", "test", "elapsed", "user.self", "sys.self", "replications"))
     #  relative  test elapsed user.self sys.self replications
     #     1.000    DT   3.817     3.813    0.020         1000
     #     1.394  Resh   5.320     5.297    0.038         1000
     #     1.427 Resh2   5.446     5.454    0.040         1000
