【问题标题】:Add a variable while reading in and merging multi-files在读入和合并多文件时添加变量
【发布时间】:2021-06-13 14:25:05
【问题描述】:

我想合并几个文件。这些是我的路径:

allpaths=c("c:\data\country_GM2\GM_2020_8.csv","c:\data\country_GM2\GM_2020_9.csv","c:\data\country_GM2\GM_2020_10.csv","c:\data\country_GM2\GM_2020_11.csv","c:\data\country_GM2\GM_2020_12.csv")

我写了一个这样的函数:

merge_1 = function(filepath) {
  datalist= lapply(filepath,
                   function(x){read.csv(file = x, 
                                        header = TRUE, 
                                        stringsAsFactors = FALSE)})
  Reduce(function(x,y){rbind.fill(x,y)},datalist)
}

data <-merge_1(allpaths) 

但是,我希望,在读取每个文件时,我可以同时从文件路径中添加一个带有年份和月份的变量。

例如,对于从“GM_2020_12.csv”中读取的那些行,添加一个值为“2020.12”的变量。

我会很感激一些提示。 到目前为止,我只能想到,tidyverse包中的“mutate”可能是解决方案,但我还没有找到正确的方法将它放入我的函数中。

非常感谢!

【问题讨论】:

    标签: r merge path dplyr


    【解决方案1】:

    您可以在读取使用正则表达式提取年份和月份值的数据时添加新列。

    将函数改为:

    merge_1 = function(filepath) {
      datalist= lapply(filepath,function(x) {
        transform(read.csv(file = x,header = TRUE, stringsAsFactors = FALSE), 
                  year_month = sub('.*?(\\d+)_(\\d+)\\.csv$', '\\1.\\2', x))
                  })
      Reduce(function(x,y){rbind.fill(x,y)},datalist)
    }
    
    data <-merge_1(allpaths) 
    

    sub 从文件名返回年份和月份值。

    allpaths=c("C:\\data\\country_GM2\\GM_2020_8.csv",
               "C:\\data\\country_GM2\\GM_2020_9.csv")
    
    sub('.*?(\\d+)_(\\d+)\\.csv$', '\\1.\\2', allpaths)
    #[1] "2020.8" "2020.9"
    

    【讨论】:

      猜你喜欢
      • 2012-10-21
      • 1970-01-01
      • 1970-01-01
      • 2019-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多