【问题标题】:How to create a for loop to open, mutate and save .csv files using R?如何创建一个 for 循环来使用 R 打开、变异和保存 .csv 文件?
【发布时间】:2019-05-24 17:45:28
【问题描述】:

我有几个 .csv 文件必须重新格式化并使用 R 脚本再次保存。 进行文件更改和重新格式化所需的功能已经建立并且可以正常工作。但由于总是有很多文档要更改,我想要一个 for lLoop,这样我就不必为每个文档调整我的代码。但不幸的是,到目前为止,我还没有使用 R 使用循环的经验。

我的代码现在是这样的:

setwd("C:/users/Desktop/Raw/.")
df <- read.csv("A1.csv", sep= ",")
new_df <- wrap_frame(df, nr = 61, rownames = "", unique_names = FALSE)
write.csv(new_df, "C:/users/Desktop/Data/A1.csv", row.names = FALSE)

原始 .csv 文件始终以相同的方式调用,其中一个字母(A 到 Z)后跟一个 1 到 12 的数字。要更改的 .csv 文件的数量可能会有所调整。但他们的名字总是遵循上述规则。

如果有人能帮助我解决这个问题,我将不胜感激!

【问题讨论】:

  • 在那个目录下,是不是只有你要编辑的.csv这些文件,还是还有其他.csv文件?
  • 只有 .csv 文件需要编辑。

标签: r csv for-loop save


【解决方案1】:

试用:

# vector of file names
my.files <- paste0(c(outer(LETTERS, 1:12, FUN = "paste0")),
                   ".csv")
# for loop
for (i in seq_along(my.files)) {
        df <- read.csv(my.files[i], sep= ",") # open
        new_df <- wrap_frame(df, nr = 61, rownames = "", unique_names = FALSE) # mutate
        write.csv(new_df, paste0("C:/users/Desktop/Data/", my.files[i]),
                  row.names = FALSE) # save
}

【讨论】:

  • 不幸的是,这段代码还不能很好地工作。根据LETTERS, 1:12 中写入的第一个数字,它只处理名称中包含 1 的文档(例如 A1、B1、C1、...)。如果根本没有A1,会弹出如下错误信息:Error in file(file, "rt") : cannot open the connection In addition: Warning message: In file(file, "rt") : cannot open file A1.csv: No such file or directoryDid I Forget to do something?
  • 我定义的文件名向量是基于您的陈述:原始 .csv 文件始终以相同的方式调用,字母(A 到 Z)后跟一个从 1 到12。此错误表明在您的工作目录中找不到某些文件。您可以使用@vaettchen 的帖子中的list.files(pattern = "*.csv")Sys.glob("*.csv") 获得好的文件名
  • 啊好吧,完美!非常感谢!
【解决方案2】:

您可以获得一个包含文件夹中所有文件名的矢量(因为此文件夹不包含您要编辑的文件之外的其他文件)

setwd( "C:/users/Desktop/Raw/" )
files <- Sys.glob( "*.csv" )

然后用

一一处理
for( i in files )
{
    df <- read.csv( i )
    new_df <- wrap_frame(df, nr = 61, rownames = "", unique_names = FALSE)
    write.csv(new_df, paste( "C:/users/Desktop/Data/", i, sep = "" ), row.names = FALSE)
}

【讨论】:

  • 非常感谢!这工作得很好!正是我希望它工作的方式!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-21
  • 2018-02-08
  • 2018-02-18
  • 2021-02-20
  • 1970-01-01
相关资源
最近更新 更多