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