【问题标题】:Run an R script iteratively迭代运行 R 脚本
【发布时间】:2018-10-22 17:27:09
【问题描述】:

我有 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())

为此,我想我会使用这段代码,但不知道在哪里使用它。 I.E 我怎样才能实现上面的代码来做到这一点?

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

})

【问题讨论】:

  • 我建议您使用list.files 列出数据框,并使用lapplypurrr::map
  • Fwiw,您可以尝试将它们全部读入。它们可能在磁盘上为 500 MB,但在 R 中则更少。顺便说一句,您可能需要if (length(inds)){...},因为df1[-which(FALSE),] 不符合您的预期。
  • @CalumYou 是的,将添加我上面所做的代码。但是不要把 lapply 函数放在哪里。
  • @KadirŞenkaya:您可以在data.table::freadreadr::read_csv 中选择要阅读的列。看到这个答案stackoverflow.com/a/48105838
  • @Tung 我使用 fread() 将文件一次导入单个数据帧。但需要一一导入导出。

标签: r tidyverse data-manipulation data-cleaning


【解决方案1】:

根据上面的 cmets,您只需在将文件分配给一个对象(您已将其定义为文件)之后使用 lapply 遍历每个文件。

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)

})

【讨论】:

  • 循环后我应该使用 rm(list=ls()) 吗?如前所述,我有 70 个 csv 文件。
  • 那么循环不会存储 70 个 csv 文件,它一次读取一个文件并将其作为“cleaned_filename.csv”写回您的目录,然后读取下一个文件。对于每次迭代,您只存储一个不断更新的对象“数据集”。如果你想清除那个对象,你可以做 rm(dataset)。您的最终目标是清理所有 70 个文件并读入 R 吗?或者只是处理并输出到你的目录?
  • 另外,我们似乎有两个不同的对象 dataset 和 df...应该将它们对齐为同一个对象吗?
  • 我的目标是清理并导出所有 70 个文件。上面的代码,我们一一导入导出对吧?只是想删除清理和导出的,以避免过度使用。
  • 是的,那么上面的代码应该适合记忆。而且我认为数据集应该改为df,除非实际上有两个不同的对象。
猜你喜欢
  • 2023-01-13
  • 1970-01-01
  • 2013-11-11
  • 2016-08-23
  • 2023-03-20
  • 2021-03-24
  • 1970-01-01
  • 1970-01-01
  • 2013-11-22
相关资源
最近更新 更多