2016-06-21 8 views
0

Я хотел был бы использовать только строки в моем файле csv, которые соответствуют определенной дате. Я видел много хороших способов сделать это, однако все они требуют от вас действительно знать, что определенная дата и указать ее в вашем коде. Поскольку я буду часто запускать эту программу, то, что я ищу, - это полностью автоматизированный процесс, когда мне не придется продолжать изменять конкретную дату в моем коде. Мой набор данных выглядит примерно так (К счастью, я всегда хочу, чтобы читать снизу, так что я могу использовать хвост, если нужно):R-read.csv только чтение в определенных строках без необходимости изменять код каждый раз

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

Просмотрите этот [link] (http://stackoverflow.com/questions/18791396/how-to-read-huge-csv-file-into-r-by-row-condition) предыдущий вопрос. Показаны несколько альтернатив. – thepule

ответ

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)) 

Много предположения, связанные с этим решением, хотя:

(я) формат, в котором записывается дата должна быть известна заранее (т.е. ГГГГ-ММ-ДД)

(II) дата CSV должен быть расположены в порядке возрастания

(iii) не рекомендуется запускать это на очень больших CSV-файлах (функция readLines может очень медленно работать для очень больших файлов). Рассмотрим SQL-решения в этом случае.

+0

Спасибо! Моя конечная цель состоит в том, чтобы найти способ не указывать дату в вызове функции (если это даже возможно), однако это упрощает работу, не имея необходимости читать во всем файле. Пока что все предположения прекрасны :) – Mel

 Смежные вопросы

  • Нет связанных вопросов^_^