**1) `resample` results in 50% improvement**

I was able to get about 50% improvement by resampling directly from the `cld` raster to a new raster with the same extent/resolution as `r` and a nearest neighbor sampling method:

    system.time({
      mat<-as.data.frame(getValues(r))
      mat$landuse<- NA
      mat$landuse<-getValues(resample(cld,r,method='ngb'))
    })
       user  system elapsed 
       2.60    0.00    2.61

vs.

    system.time({
      mat<-as.data.frame(getValues(r)) # getting values from the stack
      xy<-xyFromCell(r,c(1:ncell(r)),spatial = TRUE)
      cells<-cellFromXY(clip1,xy)
      mat$landuse<- NA
      mat$landuse<- extract(clip1,cells) #this line takes 5 mins based on profiling
    })
       user  system elapsed 
       4.98    0.00    5.02 

On a smaller dataset, and with a much smaller memory footprint

**2) Parallelization could get you a lot more**

That will improve things significantly but you can get massive improvement if you can parallelize this. R comes with a couple parallelization backends and they all run through `foreach`. I assume you are going to either process `mat` in place or save it for later. Since it takes so much work to get that resampled data let's just assume we'll save it for later. The most convenient form is probably a raster alongside the `data_robin` files.

Unfortunately, Windows and Unix parallelization options differ. On linux, use `doMC`, on Windows use `doSNOW`. Assuming we employ 4 workers:

linux initialization:

    library(doMC)
    registerDoMC(4) # number of workers should be less than number of CPU cores
 
windows initialization:

    library(doSNOW)
    cluster<-makeCluster(4, type = "SOCK") # number of workers should be less than number of CPU cores
    registerDoSNOW(cluster)

next:

    library(foreach)
    library(tools)

    # Assume you have an array of filenames called 'files'
    foreach (i=1:length(filenames), .packages=c('raster')) %dopar% {
        r <- stack(paste0(path, "/data_robin/", files[i]))
        outFilename=paste0(path, "/data_robin/", file_path_sans_ext(files[i]), "_cld.tif")
        cldResampled <- resample(cld,r,method='ngb')
        writeRaster(cldResampled, filename=outFilename, format="GTiff")
    }

One of the drawbacks of the parallel `foreach` is that it's hard to tell when something goes wrong. It would be good to do this serially first by replacing the `%dopar%` with `%do%` until you know it is working, and then let it run through the whole thing.