代码之家  ›  专栏  ›  技术社区  ›  user2165907

从文件名定义对象

r
  •  1
  • user2165907  · 技术社区  · 12 年前

    R中是否有一种方法可以从文件名定义对象?

    我从许多具有相同结构的年度文件中导入数据(每月一列,每天一行)。这些文件中的每一个都按照以下方案命名:“Station_YYYY.txt”,其中YYYY是年份(例如1985年)。

    我必须合并这些数据集,所以在融合之前,我需要为“车站”添加一个列,为“年份”添加一列。

    2 回复  |  直到 12 年前
        1
  •  1
  •   Rentrop    12 年前

    如果我理解你的问题 你做的事情

    a <- "Station_YYYY.txt"
    dat<-read.csv(a,OTHER OPTIONS)
    

    只需像这样添加车站和年份:

    dat$station<-strsplit(a,"[._]")[[1]][1]
    dat$year<-strsplit(a,"[._]")[[1]][2]
    
        2
  •  0
  •   maloneypatr    12 年前

    另一种方法是做几个简单的循环。。。

    要使以下工作正常,请确保您的本地环境为空,因为我们将搜索“_”作为文件名

    setwd('') # direct R to where the files are stored
    rm(list=ls())
    files <- list.files()
    
    for(file in files){
      name <- paste(file)
      name <- assign(name, read.csv(file))
    }
    
    data_sets <- grep('_', ls(), value = T)
    
    allData <- data.frame()
    for(i in data_sets){
      dat <- get(i)
      station_end <- data.frame(str_locate(i, '_'))$start - 1
      year_end <- data.frame(str_locate(i, '_'))$end + 4
      dat$station <- str_sub(i, 1, station_end)
      dat$year <- str_sub(i, station_end + 2, year_end)
      allData <- rbind(allData, dat)
    }
    
    allData