根据日期组合列表中的文件

时间:2015-12-23 23:13:18

标签: r date

我有一个类似命名的文件列表:“FlightTrackDATE.txt”,其中日期用YYYYMMDD表示。我使用list.files()命令读入了所有文件,但这给了我该文件夹中的所有文件(只有飞行轨迹文件在此文件夹中)。我想要做的是创建一个新文件,它将结合过去90天(或三个月,更容易)的所有文件,并忽略其他文件。

2 个答案:

答案 0 :(得分:1)

你可以试试这个:

    #date from which you want to consolidate (replace with required date)
    fromDate = as.Date("2015-12-23")


    for (filename in list.files()){

      #extract the date from filename using substr ( characters 12- 19)
      filenameDate = as.Date(substr(filename,12,19), format = "%Y%m%d")

      #read and consolidate if the filedate is on or after from date 
      if ((filenameDate - fromDate) >=0){

          #create consolidated list from first file 
          if (!exists('consolidated')){
            consolidated <- read.table(filename, header = TRUE)
          } else{

            data = read.table(filename, header = TRUE)
            #row bind to consolidate
            consolidated = rbind(consolidated, data)
          }

      }
    }

<强>输出:

我有三个示例文件:

FlightTrack20151224.txt
FlightTrack20151223.txt
FlightTrack20151222.txt

示例数据:

Name    Speed
AA101   23

合并数据:

  Name  Speed
1 AA102 24
2 AA101 23

注意:

1。通过从当前日期减去或使用上述固定日期来创建发件人日期。

2。如果再次运行脚本,请记住清理现有的合并数据。否则可能会发生数据重复。

3。将合并保存到文件:)

答案 1 :(得分:0)

考虑lapply()解决方案而不需要list.files(),因为您事先知道目录和文件名结构:

path = "C:/path/to/txt/files"

# LIST OF ALL LAST 90 DATES IN YYYYMMDD FORMAT
dates <- lapply(0:90, function(x) format(Sys.Date()-x, "%Y%m%d"))

# IMPORT ALL FILES INTO A LIST OF DATAFRAMES
dfList <- lapply(paste0(path, "FlightTrack", dates, ".txt"),                  
                 function(x) if (file.exists(x)) {read.table(x)})

# COMBINE EACH DATA FRAME INTO ONE
df <- do.call(rbind, dfList)

# OUTPUT FINAL FILE TO TXT
write.table(df, paste0(path, "FlightTrack90Days.txt"), sep = ",", row.names = FALSE)