我有一堆 .csv 文件位于path
我导入到datalist
使用以下代码命名的数据框列表中的路径中:
require(gsubfn) ## to use strapply
datalist <- list()
files <- list.files(path)
for(file in files) {
stem <- gsub("\\.csv$","",file)
datalist[[stem]] <- data.frame(read.delim(file, sep = ";", header=TRUE))
month <- strapply(stem,"^([^_]*).*$")
year <- strapply(stem,"^[^_]*_([^_]*)_.*$")
datalist[[stem]]$Month <- month
datalist[[stem]]$Year <- year
}
(您可能已经注意到,我也使用两个正则表达式来获取数据所指的月份和年份,但这应该不会导致我以后遇到的问题。)
然后我将所有数据帧绑定到merged
使用包中的rbind
函数命名的单个数据帧中plyr
:
require(plyr) ## to use rbind
merged <- rbind.fill(datalist)
我的问题是我最终得到的数据框似乎是一个奇怪的列表数据框:确实,如果我尝试将其导出为 .csv 格式,R 会抛出以下错误:
write.csv(merged,'merged.csv')
Error in write.table(x, file, nrow(x), p, rnames, sep, eol, na, dec, as.integer(quote),:
unimplemented type 'list' in 'EncodeElement'
melt
如果我尝试使用包中的andcast
函数来重塑数据框,则会向我抛出另一个类似的错误reshape
:
require(reshape) ## to use melt and cast
molten <- melt(merged)
cast <- cast(molten, ...formula...)
Error in order(var1 = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, :
unimplemented type 'list' in 'listgreater'
那么,如何从数据框列表中获取正常的数据框?unimplemented type 'list' in 'EncodeElement'
我认为问题出在“导入”过程中,因为即使我尝试仅将列表中的一个数据帧导出到 .csv,也会出现同样的错误datalist
。
非常感谢。