循环读取CSV,添加列,用文件名填充列,堆栈data.frames?

时间:2019-03-30 19:37:18

标签: r

我有54个具有相同列标题的CSV。我需要执行以下操作,但一直找不到有效的方法(理想情况下,我会在单个循环命令中执行此操作):

1。)将CSV读入单独的data.frames,这些data.frames的标题与它们来自
的CSV相同 2.)在每列中创建一个标题为“名称”的新列
3)在每个data.frame中,用该data.frame的标题填充新的“名称”列的单元格
4.)将这些data.frames堆叠到一个新的

我尝试过进行循环,这似乎是最好的方法,但是没有成功。我很高兴听到可以采取其他方法。提前非常感谢!

1 个答案:

答案 0 :(得分:0)

即使这在base R中非常可行,您最快/最明智的选择是至少加载dplyr并可能加载purrr和readr(tidyverse软件包套件的所有部分)。如果尚未安装它们,请继续:

install.packages(c("dplyr", "purrr", "readr"))

或安装tidyverse(包含以上所有内容以及更多内容)

install.packages("tidyverse")

然后将它们加载到会话中。

library(purrr)
library(dplyr)
library(readr)

然后,您告诉函数list.files的csv文件存储在哪里,并使用mapread_csv读取它们。 %>%符号是一个管道,用于接收上一个函数的输出并将其作为输入传递到下一个函数。显然将“ / path / to / your / files /”更改为实际目录。

files <- list.files(path = "/path/to/your/files/", pattern = "csv", full.names = TRUE)
files %>% 
  map(.f = ~read_csv(.x)) %>%
  set_names(nm = files) %>%      #you can also change the names manually
  map_dfr(identity, .id = "Name")