2011-07-06 19 views
17

Mam codziennie dane od 1980 r. W pliku csv. Ale chcę odczytać dane tylko od 1985 roku. Ponieważ drugi zestaw danych w innym pliku zaczyna się od 1985 roku. Jak mogę pominąć czytanie danych przed 1985 w języku R?Przeczytaj csv z określonego wiersza

Odpowiedz

26

Myślę, że chcesz zobaczyć ?read.csv, aby zobaczyć wszystkie opcje.

Ciężko podać dokładną odpowiedź, nie widząc próbki danych.

Jeśli dane nie posiada nagłówka, a wiesz, która linia danych 1985 rozpoczyna się, można po prostu użyć czegoś jak ...

impordata <- read.csv(file,skip=1825) 

... pominąć pierwsze 1825 wierszy.

W przeciwnym razie zawsze możesz po prostu przesłać dane po zaimportowaniu, jeśli masz zmienną roczną w swoich danych.

impordata <- read.csv("skiplines.csv") 
impordata <- subset(impordata,year>=1985) 

Jeśli nie wiesz, gdzie zaczyna się dane 1985, można użyć grep, aby znaleźć pierwsze wystąpienie 1985 w zmiennej data pliku, a następnie przechowywać tylko od tej linii r:

impordata <- read.csv("skiplines.csv") 
impordata <- impordata[min(grep(1985,impordata$date)):nrow(impordata),] 
17

Oto kilka alternatyw. (Może chcesz przekonwertować pierwszą kolumnę do "Date" klasy i potem ewentualnie przekształcić całą rzecz do obiektu zoo lub innego obiektu klasy szeregi czasowe.)

# create test data 
fn <- tempfile() 
dd <- seq(as.Date("1980-01-01"), as.Date("1989-12-31"), by = "day") 
DF <- data.frame(Date = dd, Value = seq_along(dd)) 
write.table(DF, file = fn, row.names = FALSE) 

read.table + podzbiór

# if file is small enough to fit in memory try this: 

DF2 <- read.table(fn, header = TRUE, as.is = TRUE) 
DF2 <- subset(DF2, Date >= "1985-01-01") 

read.zoo

# or this which produces a zoo object and also automatically converts the 
# Date column to Date class. Note that all columns other than the Date column 
# should be numeric for it to be representable as a zoo object. 
library(zoo) 
z <- read.zoo(fn, header = TRUE) 
zw <- window(z, start = "1985-01-01") 

Jeśli dane nie znajduje się na s ame format jako przykład trzeba użyć dodatkowych argumentów do read.zoo.

Multiple read.table za

# if the data is very large read 1st row (DF.row1) and 1st column (DF.Date) 
# and use those to set col.names= and skip= 

DF.row1 <- read.table(fn, header = TRUE, nrow = 1) 
nc <- ncol(DF.row1) 
DF.Date <- read.table(fn, header = TRUE, as.is = TRUE, 
    colClasses = c(NA, rep("NULL", nc - 1))) 
n1985 <- which.max(DF.Date$Date >= "1985-01-01") 

DF3 <- read.table(fn, col.names = names(DF.row1), skip = n1985, as.is = TRUE) 

sqldf

# this is probably the easiest if data set is large. 

library(sqldf) 
DF4 <- read.csv.sql(fn, sql = 'select * from file where Date >= "1985-01-01"') 
+0

Jak można przekazać wiele argumentów na bieżąco? To znaczy, jeśli chcesz zwrócić wszystkie wiersze, w których Date = "2007-01-01" LUB "2007-01-02". – Zach

+1

'podzbiór (DF2, Data ==" 2007-01-01 "| Data ==" 2007-01-02 ")' –

+0

Przepraszamy, miałem na myśli jako część funkcji read.csv.sql – Zach

Powiązane problemy