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

Cat*_*ing 4 csv r dplyr

我在 R 中聚合了一堆 CSV 文件,我使用以下代码成功完成了这些文件(在这里找到):

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

我想在 Tbl 中包含 .csv 文件名(最好没有文件扩展名)作为一列。我找到了一个使用 plyr 的解决方案,但我想坚持使用 dplyr,因为 plyr 会导致我的代码进一步出现故障。

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

非常感谢!

A G*_*ore 5

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

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)))) 
Run Code Online (Sandbox Code Playgroud)


CPa*_*Pak 0

由于 .csv 中数据的格式不清楚,因此很难确切地知道您想要什么。但尝试一下gsub。假设您在 Tbl.list 中有文件列表:

library(dplyr)

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

转换为 data.frame,然后改变文件名,将“.csv”替换为“”:

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

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

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

该列index应包含字符向量 [1...n]。该mutate语句将在 Tbl.list 中查找,获取 处的文件名index,并用 "" 替换 ".csv" 。