【问题标题】:Run the same code over a bunch of .csv file and save the results into separate .csv files [duplicate]在一堆 .csv 文件上运行相同的代码并将结果保存到单独的 .csv 文件中[重复]
【发布时间】:2018-03-28 18:29:38
【问题描述】:

我有一个问题要问大家。我有一堆名为(a-part1.csv、a-part2.csv 等)的 .csv 文件。我总共有 216 个文件。我用 R 编写了一个代码,它读取 csv 文件,然后在这个文件中执行一堆操作。 有什么方法可以在 R 中创建一个循环,在所有 216 个文件上运行相同的代码? 谢谢。

【问题讨论】:

  • 写一个函数myfun,你可以应用到所有文件。使用上面的欺骗中的代码将数据读入列表csv_list后,使用lapply(csv_list, myfun)
  • 您能否在答案中包含用于读取 csv 文件的代码?

标签: r loops csv


【解决方案1】:

代码here 将为您朗读它们(根据我的喜好修改)。您只需添加 <do something> 行并替换任何可以正确读取和写出您的特定文件/对象的调用

files <- list.files(pattern="*.csv")

for (i in seq_along(files)){
  assign(files[i], read.csv(files[i]))
  <do something>
  write.csv(files[i], paste0("new_", files[i]), sep = ",")
}

【讨论】:

  • 嗨,丹,非常感谢。我的原始代码以:orig_data orig_data 替换为 files[i] 吗?到处?。例如,如果我需要定义一个新变量,我使用 orig_data$x
  • 我正在纠结 应该如何以及是否应该在循环之前创建一个函数
  • @Yelena 你说你的代码“在这个文件中执行了一堆操作”。那不应该改变。如果您正在尝试解决代码的那部分问题,那么您还有另一个问题!看看你是否不能清楚地定义它,放在一起minimal, complete, and verifiable example 并提出这个问题:)
  • 嗨,丹,谢谢您的评论。我有一个所有编写的代码都应该应用于 a-part1.csv。我想知道是否有办法自动下载所有这些 csv 文件,而不是手动下载所有这些 csv 文件。所有 csv 文件具有相同的结构。唯一的区别是 ID。
【解决方案2】:

看起来最好的方法是创建一个数据框列表,并按照 Rui Barradas 的建议编写一个函数。代码如下:

 files <- list.files(path = "",pattern="*.txt", full.names = TRUE)
 for (i in seq_along(files)) {
   assign(paste0("DF",i), read.table(files[i], sep=";", header = T))

 }

 dfList <- list(df1=DF1,df2=DF2)

 dfList <- lapply(dfList, function(df) {

df$gender<- "F"
df


})

【讨论】:

    猜你喜欢
    • 2018-03-15
    • 1970-01-01
    • 2019-06-19
    • 2019-03-25
    • 1970-01-01
    • 2018-11-22
    • 2015-11-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多