【发布时间】:2016-12-18 10:19:42
【问题描述】:
我有一堆数据框,我想对使用包 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
应该来
"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
我使用以下代码来完成此操作:
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)
}
现在,此代码有效,但不适用于大型数据帧。我的一些数据帧有数百个变量,如果不是数千个变量,并且使用此代码,我会不断耗尽内存或 R 只是崩溃。有什么想法吗?
编辑:
有人对 ff 包发表了评论,但删除了他们的评论。无论如何,我已经对这个包进行了一些研究,但我什至似乎无法将数据帧读入 R...
我试过了:ffdfbig <- read.csv.ffdf(file="dfbig.csv")
但这给了我错误:
`Error in scan(file = file, what = what, sep = sep, quote = quote, dec = dec, :
scan() expected 'an integer', got '"1001"'`
我也尝试过使用colClasses 参数:
sampleData <- read.csv("dfbig.csv", header = TRUE, nrows = 5)
> classes <- sapply(sampleData, class)
> ffdfbig <- read.csv.ffdf(file="dfbig.csv",header = TRUE, colClasses=classes)
得到了同样的错误:
Error in scan(file = file, what = what, sep = sep, quote = quote, dec = dec, :
scan() expected 'an integer', got '"1"'
:(
【问题讨论】:
-
那我该怎么办??? :(
标签: r memory dataframe casting melt