【问题标题】:Import multiple csv, perform function, export csv in R导入多个csv,执行函数,在R中导出csv
【发布时间】:2019-12-12 12:53:47
【问题描述】:

我为单个 csv 导入 (PO1_CMJ_T01.csv) 编写了一个代码,执行了函数,然后将 csv 输出到 setwd。我希望这个函数循环,所以我可以导入 n 个文件,分析数据的函数,然后将 n 个文件导出到 setwd 文件夹

我已经尝试 lapply 为文件创建一个循环,但我无法让它工作。我坚持让循环开始并逐个文件分析。任何帮助都将是绝对惊人的。在此先感谢!

# load required packages
require(readr)
library(tidyverse)
getwd()


# import data frame
filename <- "P01_CMJ_T01.csv"
datapath <- ''
Jump.1 = read_csv(
  paste0(datapath, filename),
  col_names = TRUE,
  skip = 3,
  trim_ws = TRUE
)

执行功能等

# Write output
output <- data.frame(
     ),
  cell = NA
)


show(output)


write.csv(output,
          file = paste0('output-', sub('.xlsx', '.csv', filename)))

If I import 50 files, I would like the analysis to take place, then 

write.csv 输出50个文件到wd文件夹

【问题讨论】:

  • 请努力将您的问题简化为 minimal 工作示例:那里的绝大多数代码与您的问题无关,因此它既会分散注意力又会减慢任何人的速度对你的问题表现出兴趣。对我来说,一般来说,我会尽量避免滚动代码块;更多,这表明我可能有太多(总是有例外)。执行诸如计算平均值和/或 mutate 等操作的代码(如果我正确理解您的需要)完全没有实际意义且没有必要。
  • 会做的,感谢您的反馈。

标签: r loops csv


【解决方案1】:

我会编写一个函数,它接受一个文件并执行读取、分析和写入三个步骤。 (如果分析步骤很长,单独的函数可能会有所帮助。)然后,您可以使用您的函数和 lapplyfor 循环或类似的东西循环遍历 50 个文件。

这是一个例子:

files1 <- list.files(
    file.path(system.file(package = "readr"), "extdata"), 
    pattern = "csv$", full.names = TRUE)

f1 <- function(file) {
    # read
    df1 <- suppressMessages(readr::read_csv(file, guess_max = 1050))
    # analyze
    df2 <- f2(df1)
    # write
    tmp1 <- file.path(dirname(file), paste0("new_", basename(file)))
    readr::write_csv(df2, path = tmp1)
    invisible(tmp1) # optional
}

f2 <- function(data) {
    df2 <- head(data)
    message("Results has ", nrow(df2), " rows and ", ncol(df2), " columns.")
    return(df2)
}

lapply(files1, f1)

【讨论】:

    猜你喜欢
    • 2018-11-22
    • 2021-12-31
    • 2020-10-02
    • 1970-01-01
    • 2017-10-24
    • 1970-01-01
    • 1970-01-01
    • 2021-02-13
    • 1970-01-01
    相关资源
    最近更新 更多