我只想使用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*)
然而,经过一段时间后,我的数据集会变得非常大,我不认为我每次都想继续阅读这么大的数据集。
答案 0 :(得分:0)
我将一个自定义函数放在一起,该函数将从指定日期读入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解决方案。