R-read.csv 只读取某些行而不必每次都修改代码

R-read.csv only read in certain rows without having to modify code everytime

我只想使用我的 csv 文件中与特定日期相对应的行。我见过很多这样做的好方法,但是,它们都要求您实际知道特定日期并在您的代码中指定它。由于我会经常 运行 这个程序,我正在寻找的是一个完全自动化的过程,我不必继续更改我的代码中的特定日期。我的数据集看起来像这样(幸运的是,我总是想从底部读取,所以如果需要我可以使用 tail):

Date      Ticker
...        ....
2015-12-31 TIF
2016-01-31 DD
2016-01-31 ADP

本质上,我是在问是否有办法说 read.csv("df.csv", *only rows with same date as last row*)

我知道可以根据日期进行子集化,或者可能有一些方法可以这样做:

x <-tail(df, *only rows with same date as last row*)

但是,一段时间后,我的数据集会变得很大,我不想每次都继续读取这么大的数据集。

我会组合一个自定义函数,该函数将从指定日期读入 data.frame。

ReadFrom <- function(filename, date){
  sno<-grep(date, readLines(filename))[1]
  dat <- read.table(filename, skip=sno-1, header=F, sep=",") 
  names(dat) <- unlist(read.table(filename, nrows=1, stringsAsFactors=F)) # insert header from row 1 of .csv file
  return(dat)
}

ReadFrom("example.csv", "2016-01-31")
        Date Ticker
1 2016-01-31     DD
2 2016-01-31    ADP

ReadFrom("example.csv", "2015-12-31")
        Date Ticker
1 2015-12-31    TIF
2 2016-01-31     DD
3 2016-01-31    ADP

数据(写成"example.csv"):

structure(list(Date......Ticker = structure(c(1L, 3L, 2L), .Label = c("2015-12-31 TIF", 
"2016-01-31 ADP", "2016-01-31 DD"), class = "factor")), .Names = "Date......Ticker", class = "data.frame", row.names = c(NA, 
-3L))

很多与此解决方案相关的假设:

(i) 必须事先知道写入日期的格式(即 YYYY-MM-DD)

(ii) csv 的日期必须按升序排列

(iii) 不建议 运行 在非常大的 csv 文件上这样做(对于非常大的文件,readLines 函数会变得非常慢)。在这种情况下考虑 sql 解决方案。