【问题标题】:Include .csv filename when reading data into r using list.files [duplicate]使用 list.files 将数据读入 r 时包含 .csv 文件名
【发布时间】:2017-11-11 17:58:47
【问题描述】:

我在 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 中包含文件名?

非常感谢!

【问题讨论】:

标签: r csv dplyr


【解决方案1】:

这是我的解决方案。让我知道这是否有帮助。

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)))) 

【讨论】:

  • 确实如此!非常感谢!
【解决方案2】:

由于 .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" 替换为 "" 。

【讨论】:

    猜你喜欢
    • 2017-11-06
    • 2012-03-26
    • 2021-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-10
    • 2011-09-01
    相关资源
    最近更新 更多