R 使用一组.csv文件中的数据子集和文件名创建新文件

R 使用一组.csv文件中的数据子集和文件名创建新文件,r,csv,R,Csv,我的问题可能是如何从for循环导出数据,但我不确定如何修复它 我在一个文件夹中有200多个文件,所有文件的结构都是相同的,我想从中提取单个列的最大数量。我已经做了一个for循环,基于这里的代码来实现这一点 到目前为止,我运行的内容如下所示: fileNames<-Sys.glob("*.csv") for(i in 1:length(fileNames)){ data<-read.csv(fileNames[i]) VelM = max(data[,8],na.rm=

我的问题可能是如何从for循环导出数据,但我不确定如何修复它

我在一个文件夹中有200多个文件,所有文件的结构都是相同的,我想从中提取单个列的最大数量。我已经做了一个for循环,基于这里的代码来实现这一点

到目前为止,我运行的内容如下所示:

fileNames<-Sys.glob("*.csv")

for(i in 1:length(fileNames)){

   data<-read.csv(fileNames[i])
   VelM = max(data[,8],na.rm=TRUE)

   write.table(VelM, "Summary", append=TRUE, sep=",",
       row.names=FALSE,col.names=FALSE)

}

<代码>文件名如果您想快速读取文件,则应该考虑使用<代码>数据。表::FRAAD 或<代码> Reord::Read Oracle CSV<代码>,而不是BASE>代码> Read .CSV

例如:

fileNames <- list.files(path = your_path, pattern='\\.csv') # instead of Sys.glob

library('data.table')  

dt <- rbindlist(lapply(fileNames, fread, select=8, idcol=TRUE))

dt[, .(max_val = max(your_var)), by = id]

write.table(dt, 'yourfile.csv', sep=',', row.names=FALSE, col.names=FALSE)

fileNames以下是我建议改进当前方法的内容,也可以使用
fread()
,因为它速度非常快,并且有
select
参数。请注意,我已将
write.table()
调用移到
for()
循环之外。这允许以更简洁的方式在max列旁边添加新的文件名列,并且消除了在每次迭代时追加到文件的需要

library(data.table)

fileNames <- Sys.glob("*.csv")
VelM <- numeric(length(fileNames))

for(i in seq_along(fileNames)) {
    VelM[i] <- max(fread(fileNames[i], select = 8)[[1L]], na.rm = TRUE)
}

write.table(data.frame(VelM, fileNames), "Summary", sep = ",",
    row.names = FALSE, col.names = FALSE)
库(data.table)

文件名我实际上喜欢这种方法,因为它不保留整个列,只保留每个文件的最大值。这可以更有效地使用内存。除非您希望能够对整个列执行在读取文件时不知道的其他内容(如平均值、中值等)。对于样式,也可以使用
sapply
而不是for循环:
VelM