R 如何将多个矩阵合并成一个大矩阵
我定义了一个函数来处理每个csv文件,它返回一个矩阵。我想在for循环中使用这个函数来处理所有文件,并将所有数据合并到一个大矩阵中。但是这个代码似乎不起作用R 如何将多个矩阵合并成一个大矩阵,r,matrix,rbind,R,Matrix,Rbind,我定义了一个函数来处理每个csv文件,它返回一个矩阵。我想在for循环中使用这个函数来处理所有文件,并将所有数据合并到一个大矩阵中。但是这个代码似乎不起作用 filenames=dir() bigMatrix = processEachCSV(filenames[1]) for (i in 2:length(filenames1)) { x = processEachCSV(filenames[i]) bigMatrix=rbind[bigMatrix,x] } 我猜这是因为我不能
filenames=dir()
bigMatrix = processEachCSV(filenames[1])
for (i in 2:length(filenames1)) {
x = processEachCSV(filenames[i])
bigMatrix=rbind[bigMatrix,x]
}
我猜这是因为我不能把x和bigMatrix赋值给bigMatrix本身
我该怎么办
processEachCSV函数如下所示:
processEachCSV <- function (filename){
x = read.table(filename, header=F, sep=',', fileEncoding='UTF-8')
x$V4=as.numeric(gsub("[^0-9.]",'', as.character(x$V4)))
x$V5=as.numeric(gsub("[^0-9.]",'', as.character(x$V5)))
x$V6=substr(filename, 1, nchar(filename)-4)
colnames(x)=c('DateTime','Site','AQI','PM25','PM10','City')
x=as.matrix(x)
return (x)
}
processEachCSV基本方法如下:
do.call(rbind, lapply(filenames, read.csv))
自定义read.csv
部分,使用processEachCSV
函数(如果这确实是一个函数)的实际操作
或者,您可以查看“dplyr”中的一些rbind\u list
函数或“data.table”中的rbindlist
函数,两者都比do.call(rbind,…)
更有效。在这些情况下,结果不会是一个矩阵
,但您可以很容易地将其转换为矩阵。以列表
的形式读取所有文件,然后使用do.call(rbind,yourList)
。如果要使用rbind
,您需要使用()
,而不是[]
,对吗,processEachCSV实际上是一个函数。所以我尝试了“do.call(rbind,lappy(filenames,processEachCSV())”,但似乎文件名没有传递给processEachCSV函数。我还尝试使用do.call(rbind,lappy(as.list(filenames)),processEachCSV())将文件名从字符向量转换为列表。也不起作用。@user3768495,您应该尝试do.call(rbind,lappy(文件名,processEachCSV))
。不要将()
添加到processEachCSV
。然而,如果不知道processEachCSV
到底做了什么,我就很难确保我所建议的能够起作用。另外,所有文件的列数是否都相同?我尝试过不使用()但仍然不起作用。所有文件都有6列,我已经检查过了…我更新了我的问题,向您展示了函数。谢谢大家!@user3768495,我想这与问题无关,但当列包含不同的数据类型时,为什么要使用矩阵?为什么不使用数据帧?