【问题标题】:Importing multiple csv files and add year to each file导入多个 csv 文件并为每个文件添加年份
【发布时间】:2020-08-31 19:47:32
【问题描述】:

我正在使用以下函数将大约 10 个不同年份的文件(都来自同一个文件夹)导入 r。

ed.attain.places_0_10_18 <-
    list.files(path = "./ed_attainment/",
               pattern = "*.csv", 
               full.names = T) %>% 
    map_df(~read_csv(., col_types = cols(.default = "c"))) 

此文件夹 (ed_attainment/) 包含以下 csv 文件,一直到 '17。

ACS_09_5YR_B19301_with_ann.csv
ACS_10_5YR_B19301_with_ann.csv

我想在上述函数中为每个文件添加年份。只需导入一个 csv 文件,代码将是

read_csv("ACS_09_5YR_B19301_with_ann.csv")%>%mutate(year = 09)

使得文件名中的年份与新的“年份”变量中的值相对应。

非常感谢!

【问题讨论】:

    标签: r csv dplyr


    【解决方案1】:

    我建议:

    myReadCsv <- function(fullPath){
       # Pull the Year out of the fullPath
      year <- paste0("20", str_match(fullPath, 
                             "ACS_(\\d{2})")[,2])
        # Read csv as you did before
      read_csv(fullPath, col_types = cols(.default = "c")) %>% 
         # Add YEAR in as a column
        mutate(YEAR = year)
    }
    

    然后

    ed.attain.places_0_10_18 <-
      list.files(path = "./ed_attainment/",
                 pattern = "*.csv", 
                 full.names = T) %>% 
      map_df(myReadCsv) 
    

    不运行

    ## 因为我手边没有 CSV 文件的目录。 ##

    【讨论】:

      【解决方案2】:

      有多种方法可以做到这一点,但无需更改大部分代码,您可以在 map_df 中添加一个名为 year 的 id 变量,该变量将具有文件名的索引。所以第一个文件 (ACS_09_5YR_B19301_with_ann.csv) 的索引为 1,第二个文件 (ACS_10_5YR_B19301_with_ann.csv) 的索引为 2,依此类推。

      然后,您可以将 2008 年添加到该指数,以获得 2009-2017 年的年份值。

      list.files(path = "./ed_attainment/",
                 pattern = "\\.csv", 
                 full.names = TRUE) %>% 
          purrr::map_df(~readr::read_csv(.,col_types = cols(.default = "c")), 
                       .id ='year') %>% 
         dplyr::mutate(year = 2008 + as.integer(year))
      

      【讨论】:

      • 太棒了!然后如果我想删除标题,我只需在 as.integer(year)) 之后插入 %&gt;%slice(-1)
      • slice(-1) 将从组合数据中删除第一行。标题是指要删除列名吗?
      • 是的,每个文件中有两行列名,我想要第二行。
      • 另外,只是一个快速的后续问题 - 如果一个文件不同步(如 '15 介于 '11 和 '13 之间,或者缺少一年)是否有解决方法为此?
      • 您可以从文件名中提取年份名称或在list.filesmap_df之间添加%&gt;% gtools::mixedsort() %&gt;%
      猜你喜欢
      • 2017-04-13
      • 1970-01-01
      • 1970-01-01
      • 2022-01-26
      • 2017-04-21
      • 1970-01-01
      • 2021-09-18
      • 2015-05-03
      • 1970-01-01
      相关资源
      最近更新 更多