I've got a bunch of dataframes that I want to make a few changes to using packages tidyr, reshape/reshape2.
Y C S A B_B_m B_B_p C_m C_p D_m D_p
2000 "AUSTRIA" "total" "no" 33 44 55 66 77 99
2001 "AUSTRIA" "total" "no" 22 11 0 23 24 25
2002 "AUSTRIA" "total" "no" 88 45 56 47 38 39
2003 "AUSTRIA" "total" "no" 90 48 67 67 69 74
Should be come
"C" "Y" "S" "A" "moment" "B_B" "C" "D"
"AUSTRIA" 2000 "total" "no" "m" 33 55 77
"AUSTRIA" 2000 "total" "no" "p" 44 66 99
"AUSTRIA" 2001 "total" "no" "m" 22 0 24
"AUSTRIA" 2001 "total" "no" "p" 11 23 25
"AUSTRIA" 2002 "total" "no" "m" 88 56 38
"AUSTRIA" 2002 "total" "no" "p" 45 47 39
"AUSTRIA" 2003 "total" "no" "m" 90 67 69
"AUSTRIA" 2003 "total" "no" "p" 48 67 74
I use the following code to accomplish this:
setwd("C:\\...)
files = list.files(pattern="*.dta") #making a list for the files.
dflist <- list()
for (i in 1:length(files)){
dflist[[i]] <- read.dta13(files[i], nonint.factors = TRUE)
dflist[[i]] <- melt(dflist[[i]], id=c("C","Y","S","A"))
dflist[[i]] <- extract(dflist[[i]], variable, c('type', 'moment'), '^(.+)_([^_]+)$')
dflist[[i]] <- cast(dflist[[i]],...~type)
}
Now, this code works but not for large dataframes. Some of my dataframes have hundreds if not thousands of variables, and using this code I keep running out of memory or R simply crashes. Any ideas?
Edit:
Someone commented something about the ff package, but deleted their comment. Anyway, I've looked into this package a bit but I can't even seem to be able to read a dataframe into R...
I tried: ffdfbig <- read.csv.ffdf(file="dfbig.csv")
But this gave me the error:
`Error in scan(file = file, what = what, sep = sep, quote = quote, dec = dec, :
scan() expected 'an integer', got '"1001"'`
I also tried using the colClasses
argument:
sampleData <- read.csv("dfbig.csv", header = TRUE, nrows = 5)
> classes <- sapply(sampleData, class)
> ffdfbig <- read.csv.ffdf(file="dfbig.csv",header = TRUE, colClasses=classes)
And got the same kind of error:
Error in scan(file = file, what = what, sep = sep, quote = quote, dec = dec, :
scan() expected 'an integer', got '"1"'
:(