我有54个具有相同列标题的CSV。我需要执行以下操作,但一直找不到有效的方法(理想情况下,我会在单个循环命令中执行此操作):
1。)将CSV读入单独的data.frames,这些data.frames的标题与它们来自
的CSV相同
2.)在每列中创建一个标题为“名称”的新列
3)在每个data.frame中,用该data.frame的标题填充新的“名称”列的单元格
4.)将这些data.frames堆叠到一个新的
我尝试过进行循环,这似乎是最好的方法,但是没有成功。我很高兴听到可以采取其他方法。提前非常感谢!
答案 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文件存储在哪里,并使用map
和read_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")