【问题标题】:Merging multiple csv files with name sequence合并具有名称序列的多个 csv 文件
【发布时间】:2019-07-13 21:32:21
【问题描述】:

我正在尝试在 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...等顺序绑定文件。由于文件的顺序对我来说很重要,您能否建议将其合并到上面的代码中? 非常感谢您的帮助!

【问题讨论】:

  • 当前行为与您想要的有何不同?
  • 我想要我的行来自文件flux.0、flux.1、flux.2...flux.733,而不是我从flux.0、flux.1、flux.10、flux中获取行.100。它正在重新组合我的文件,然后合并它们,这是我不想要的。此外,我无法将文件命名为这些自动生成的文件名。

标签: r csv import filenames


【解决方案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) 

【讨论】:

  • 非常感谢您提供的代码。这里是一个愚蠢的问题。价值储存了什么? csv 文件中的文件名或不同列的值。
  • 很高兴我能帮上忙,很抱歉,这里必须更清楚。当您将vector 转换为tbl_df() 时,列名将默认为“值”。在这种情况下,它将是路径。另外,我看到您是 SO 的新手。如果您认为答案解决了您的问题,请单击绿色复选标记将其标记为“已接受”。这有助于将注意力集中在仍然没有答案的旧 SO。
  • 感谢您的澄清。但是,我仍然得到相同的结果,只是有另一列带有路径名。
  • 我尝试在我自己的文件上运行 can。 value 变量将是您的路径
【解决方案2】:

在这里,您可以使用自己的方法获得另一个答案。我刚刚添加了一个读取 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

【讨论】:

  • 嘿!谢谢您的帮助。您的代码有效,但无法解决我的问题。我需要按顺序从合并文件中提取数据。在当前情况下,我必须以 10 个为一组进行提取,这又非常耗时,因为我有 700 多个文件
  • 可能是我没理解好。问题是您要添加一个代表您合并的文件系列的属性。例如,有 10 个文件并希望通过例如 5 个块/系列来识别合并的文件。在这种情况下,您将有一个标识符为“1to5”和“6to10”的新列,或者可能是“flux1”和“通量2'或可能是'通量5'和'通量10'?
  • 其实我的文件名存储为flux.0flux.1,flux.2.....flux.733。每个文件有 7 列和 1 行。我的目标是将这些文件组合成 1 个 733 行和 7 列的文件。但诀窍是我希望存储在文件中的数据与文件名相同(即在表示特定集合输出的序列中)。我是 R 的初学者,因此在做这件事时遇到了很多麻烦。
猜你喜欢
  • 1970-01-01
  • 2021-09-24
  • 1970-01-01
  • 1970-01-01
  • 2021-10-04
  • 2018-08-31
  • 2013-10-10
  • 2021-12-17
  • 1970-01-01
相关资源
最近更新 更多