我刚踏入编程的世界,需要帮助将文件加载到R中并创建矩阵。我可以导入单个文件并从中创建单个矩阵。但如何处理多个文件呢?我有21个文件,每个文件都包含100行和100列,我需要导入每个文件并将所有内容放入一个单一的数组。
list.files
to list my files by pattern. lapply
to loop through the list of files and create a list data.frame with read.csv
rbindlist
to bind all in a big matrix.
temp = list.files(pattern="*.csv")
named.list <- lapply(temp, read.csv)
library(data.table)
files.matrix <-rbindlist(named.list)
temp = list.files(pattern="*.csv")
named.list <- lapply(temp, read.csv)
如果您想获得一个100 x 100 x 21的数组,请继续执行以下操作:
require(abind)
arr <- abind(named.list)
longdf <- do.call(rbind, named.list)
longmtx <- data.matrix(longdf)
list.files(path='your_files_path',pattern='.*csv')
。 - agstudylapply(temp, fread)
。有一个要求是让fread
接受多个文件并在其中构建。这样,这4行代码就可以简化为fread(list.files(pattern="*.csv"))
。这样它就可以在开始读取输入之前检查所有输入的格式一致性,因此如果格式不一致,就可以更早地发出错误提示。它还可以通过只分配一次完整的最终大表来使用较少的工作内存,而不是将它们全部分别读取,然后复制到大表中。听起来可以吗? - Matt Dowlefread
能够切换到像ff
包一样处理大型数据集的方式就太好了。 - agstudyfread(<multiple files>)
在所有方面都比lapply(temp,read.csv)
更好。这就是我现在要处理的全部内容。大于RAM的数据留待以后再说。 - Matt Dowle