通过遍历文件夹更改标识符——R

Change identifier by looping through folders -- R

我有一个与循环相关的问题。我有以下文件夹结构(摘录):

├───Y2017
    │       UDB_cSK17D.csv
    │       UDB_cSK17H.csv
    │       UDB_cSK17P.csv
    │       UDB_cSK17R.csv
    │       UDB_cUK17D.csv
    │       UDB_cUK17H.csv
    │       UDB_cUK17P.csv
    │       UDB_cUK17R.csv            
└───Y2018
    │       UDB_cSK18D.csv
    │       UDB_cSK18H.csv
    │       UDB_cSK18P.csv
    │       UDB_cSK18R.csv
    │       UDB_cUK18D.csv
    │       UDB_cUK18H.csv
    │       UDB_cUK18P.csv
    │       UDB_cUK18R.csv

所有文件都具有相同的结构。我想遍历它们并从 select 列中提取数据。文件名也都具有相同的结构。所有文件都有:

  1. 确定的唯一国家(例如上面示例中的英国、SK)
  2. 独特的数据库类型(D、H、P... - 文件名中的最后一个字符)

我想构造一个遍历文件名的循环。对于一个国家,这将是这样的:

    library(data.table)

    ldf<-list()

    country_id<-"UK(.*)"
    db_id<-"P.csv$"

    listcsv<-dir(pattern = paste0(country_id,db_id), recursive = T, full.names = T)
    
    for (k in 1:length(listcsv)){
        ldf[[k]]<-fread(listcsv[k],select = c("PB010","PB020"))
        }
    
    uk_data<-bind_rows(as.data.frame(do.call(rbind,ldf[])))

这段代码根据我给它的国家标识符(在这个例子中是英国)提取我需要的所有列。由于我的数据集中有许多国家/地区,因此我希望有一个代码可以遍历并 更新 国家/地区标识符。我尝试了以下方法:

ldf_new<-list()
countries <-c("SK", "UK")
for (i in 1:length(countries)) {
  currcty1 <- countries[i]
  
  listcsv<-dir(pattern = paste0(currcty1,"(.*)",db_id), recursive = T, full.names = T)
  # print(listcsv)
  ldf_new<-fread(listcsv[i],select = c("PB010","PB020"))
}

这里发生的是我只得到变量 ldf_new 中最后一次迭代的结果(即本例中的 UK)。有什么办法可以得到 SK 和 UK 的结果吗?

非常感谢!

更改循环的最后一行以便将新元素添加到列表中应该可以解决问题:

ldf_new<-list()
countries <-c("SK", "UK")
for (i in 1:length(countries)) {
  currcty1 <- countries[i]
  
  listcsv<-dir(pattern = paste0(currcty1,"(.*)",db_id), recursive = T, full.names = T)
  # print(listcsv)
  ldf_new<-c(ldf_new, fread(listcsv[i],select = c("PB010","PB020")))
}