Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
迭代运行R脚本_R_Tidyverse_Data Manipulation_Data Cleaning - Fatal编程技术网

迭代运行R脚本

迭代运行R脚本,r,tidyverse,data-manipulation,data-cleaning,R,Tidyverse,Data Manipulation,Data Cleaning,我有70个CSV文件,它们的列与我想对其执行相同的过程的列相同。 基本上我想要的是导入、清理、写入文件并删除所有变量,然后重复下一个。因为每一个都是0.5GB 如果不以有效的方式迭代加载包,我如何做到这一点 library(tidyverse) setwd("~/R/R-3.5.1/bin/i386") df <- read.csv(file.choose(), header = TRUE, sep = ",") inds <- which(df$pc_no == "DELL")

我有70个CSV文件,它们的列与我想对其执行相同的过程的列相同。 基本上我想要的是导入、清理、写入文件并删除所有变量,然后重复下一个。因为每一个都是0.5GB

如果不以有效的方式迭代加载包,我如何做到这一点

library(tidyverse)
setwd("~/R/R-3.5.1/bin/i386")
df <- read.csv(file.choose(), header = TRUE, sep = ",")

inds <- which(df$pc_no == "DELL")
df[inds - 1, c("event_rep", "loc_id")] <- df[inds, c("pc_no", "cust_id")]
df1 <- df[-inds, ]

write.csv(df1, "df1.csv")

rm(list=ls())
要做到这一点,我想我会使用这段代码,但不知道在哪里使用它。也就是说,我如何实现上述代码来做到这一点

list.files(pattern="^events.*?\\.csv", full.names=TRUE, recursive=FALSE)
lapply(files, function(x) {
files <- function(df1)

})

根据上面的注释,在将文件指定给已定义为文件的对象后,只需使用Lappy循环遍历每个文件

library(tidyverse)
setwd("~/R/R-3.5.1/bin/i386")

files <- list.files(pattern="^events.*?\\.csv", full.names=TRUE, recursive=FALSE)

lapply(files, function(x) {

  df <- read.csv(x, header = TRUE, sep = ",")

  inds <- which(df$pc_no == "DELL")
  df[inds - 1, c("event_rep", "loc_id")] <- df[inds, c("pc_no", "cust_id")]
  df1 <- df[-inds, ]

  write.csv(df1, paste0('cleaned_', x), row.names = FALSE)

})

我建议您使用list.files创建一个数据帧列表,并使用lappy或purr::mapFwiw,您可以尝试将它们全部读入。它们在磁盘上的大小可能是500 MB,但在R中的大小可能会更小。顺便说一句,如果长度为{…},您可能需要,因为df1[-whichFALSE,]并没有达到预期效果。@CalumYou Yes,将添加我在上面所做的代码。但不知道将lappy函数确切放置在何处。@KadirŞenkaya:您可以在data.table::fread或readr::read_csv中选择要读取的列。请参阅此答案@Tung我使用fread将文件导入一次到单个数据帧。但是需要一个接一个地导入和导出。循环之后我应该使用rmlist=ls吗?如前所述,我有70个csv文件。循环不存储70个csv文件,它一次读入一个文件,并将其作为“cleaned_filename.csv”写回目录,然后读入下一个。对于每个迭代,您只存储一个正在不断更新的对象“数据集”。如果您想清除该对象,只需执行rmdataset即可。您的最终目标是将所有70个文件清理并读入R吗?或者只是处理并输出到您的目录?而且-看起来我们有两个不同的对象dataset和df。。。这些文件是否应该作为同一对象对齐?我的目标是清理并导出所有70个文件。以上代码,我们一一进出口对吗?只是想删除已清理和导出的,以避免过多的容量使用。是的,那么上面的代码对于内存来说应该很好。我认为dataset应该改为df,除非实际上有两个不同的对象。