如何将多个矩阵转换成一个大矩阵

时间:2015-03-06 02:13:01

标签: 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]
}

我想这是因为我无法将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)
}

1 个答案:

答案 0 :(得分:3)

基本方法如下:

do.call(rbind, lapply(filenames, read.csv))

使用read.csv函数实际执行的操作自定义processEachCSV部分(如果确实是函数)。


或者,您可以查看&#34; dplyr&#34;中的一些rbind_list函数。或来自&#34; data.table&#34;的rbindlist函数,两者都比do.call(rbind, ...)更有效。在这些情况下,结果不会是matrix,但您可以很容易地将其转换为矩阵。