使用名称序列合并多个csv文件

时间:2019-02-20 08:48:46

标签: r csv import filenames

我正在尝试在R中合并700多个csv文件。我能够使用以下代码成功合并它们:

library(dplyr)
library(readr)
df <- list.files(full.names = TRUE) %>% 
  lapply(read_csv) %>% 
  bind_rows 

现在我的问题是文件名另存为flux.0,flux.1,flux.2 ...... flux.733。 R会按flux.0,flux.1,flux.10,flux.100,flux.101 ...的顺序绑定文件。由于文件的顺序对我很重要,因此您可以建议将其合并到上面的代码中吗? 非常感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

我执行类似操作的管道是获取所有文件的列表(如您所做的那样),将其转换为tbl / data.frame,然后使用map来读取文件并unnest()。这就是为什么我可以保留我加载的每个文件的路径/文件名的原因。

require(tidyverse)

df <- list.files(path = "path",
                       full.names = TRUE,
                       recursive = TRUE,
                       pattern = "*.csv") %>% 
tbl_df() %>%
mutate(data = map(value, read.csv)) %>%
arrange(value) %>%
unnest(data) 

答案 1 :(得分:0)

在这里,您将使用自己的方法得到另一个答案。我刚刚添加了一个读取csv的函数,并添加了一个名为'file'的新列,其文件名不带扩展名。

library(dplyr) 
library(readr) 

df <- list.files(full.names = TRUE) %>% 
    lapply(function(x) {a <- read_csv(x);
                        mutate(a, file = tools::file_path_sans_ext(basename(x)))}) %>%
    bind_rows