如何操作文件夹中的多个文件而不必将它们加载到R中

时间:2017-11-22 17:38:20

标签: r

作为我正在解决的问题的一部分,我需要将50个文件附加到一个文件中。我希望我是否可以使用for循环执行相同操作,但我无法这样做,因为list.files()只提供文件的文字名称而不是文件中的数据。

有人可以帮我在R中执行类似的逻辑:

c = list.files()
for (i = 1:length(c))
{
  a = c[i]
  % any operation on 'a' since it now contains the data of the first file in c
}

但上面似乎没有用,因为'c'只有文件的文字名而不是数据。

有人可以指导我如何做到这一点吗?

2 个答案:

答案 0 :(得分:0)

据我所知,如果没有将文件加载到R中,就无法在R中执行此操作。但是,R中有多种方法可以读取文件,组合它们然后编写单个文件合并文件。下面是一个例子,我们假设我们想要读入,组合并保存当前目录中的所有csv文件。

library(tidyverse)

map_df(list.files(pattern="csv$"), function(f) {
  read_csv(f)
}) %>% write_csv(., "New file.csv")

答案 1 :(得分:0)

将文件名存储在对象中。

> fl_list <- list.files()

您可以看到目录中的文件

> fl_list
[1] "credit.csv"  "credit1.csv" "credit2.csv"
[4] "credit3.csv"

我认为你想通过按行组合来追加数据,所以我使用了rbind。

您必须创建一个空数据框。

> credit_main <- data.frame()

现在,您可以在存在的文件列表中运行良好的旧for循环,并按行绑定它们。

> for(i in 1:length(fl_list)){
+   credit <- read.csv(fl_list[i])
+   credit_main <- rbind(credit, credit_main)
+ }

检查创建的新数据框的尺寸。

> dim(credit_main)
[1] 4000   10

我在本例中使用了具有不同名称的相同文件

> dim(credit)
[1] 1000   10