使用list.files将数据读入r时包含.csv文件名

时间:2017-06-09 16:18:16

标签: r csv dplyr

我在R中汇总了一堆CSV文件,我已成功使用以下代码(找到here):

  Tbl <- list.files(path = "./Data/CSVs/",
         pattern="*.csv", 
         full.names = T) %>% 
   map_df(~read_csv(., col_types = cols(.default = "c"))) 

我希望将.csv文件名(理想情况下没有文件扩展名)包含在Tbl中的列中。我找到了一个使用plyr的解决方案,但是我想坚持使用dplyr,因为plyr会导致我的代码进一步下滑。

有什么方法可以在上面的代码中添加一些东西,告诉R在Tbl $ filename中包含文件名吗?

非常感谢!

2 个答案:

答案 0 :(得分:4)

这是我的解决方案。如果这有帮助,请告诉我。

Tbl <- list.files(path = "./Data/CSVs/",
         pattern="*.csv", 
         full.names = T) %>% 
   map_df(function(x) read_csv(x, col_types = cols(.default = "c")) %>% mutate(filename=gsub(".csv","",basename(x)))) 

答案 1 :(得分:0)

由于.csv中的数据格式不清楚,因此很难准确了解您的需求。但请尝试gsub。假设您有Tbl.list中的文件列表:

library(dplyr)

Tbl.list <- list.files(path = "./Data/CSVs/",
                       pattern="*.csv", 
                       full.names = T)

转换为data.frame,然后使用“”修改文件名“.csv”:

Tbl.df <-   data.frame( X1 = Tbl.list ) %>%
            mutate( filename_wo_ext = gsub( ".csv", "", X1 ) ) 

您也可以尝试以下方法,但我不确定它是否有效。 (我们假设你还有Tbl.list)。首先更改map_df语句以添加index列:

map_df(~ read_csv(., col_types = cols(.default = "c")),
         .id="index") %>%
mutate( gsub( ".csv", "", Tbl.list[as.numeric(index)] )

index应包含字符向量[1 ... n]。 mutate语句将在Tbl.list中查找,在index抓取文件名,并使用“”将“.csv”分出。