2011-07-06 28 views
17

Tengo datos diarios a partir de 1980 en el archivo csv. Pero quiero leer datos solo a partir de 1985. Porque el otro conjunto de datos en otro archivo comienza en 1985. ¿Cómo puedo omitir la lectura de los datos antes de 1985 en el lenguaje R?Lea csv de la fila específica

Respuesta

26

Creo que quiere echar un vistazo a ?read.csv para ver todas las opciones.

Es un poco difícil dar una respuesta exacta sin ver una muestra de sus datos.

Si los datos no tiene un encabezado y que sabe qué línea los datos de 1985 se inicia en, puede simplemente usar algo como ...

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

... para saltar las primeras 1825 líneas.

De lo contrario, siempre puede subconjuntar los datos después de haberlos importado si tiene una variable anual en sus datos.

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

Si usted no sabe donde comienza los datos de 1985, puede utilizar grep para encontrar la primera instancia de 1985 en variable de fecha de su archivo y sólo mantener de esa línea en adelante:

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

Aquí hay algunas alternativas. (Es posible que desee convertir la primera columna para "Date" clase después y posiblemente convertir todo lo que hay un objeto zoológico u otro objeto de clase de series de tiempo.)

# 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 + subconjunto

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

Si los datos no está en la s Como ejemplo, necesitará usar argumentos adicionales al read.zoo.

múltiple de read.table

# 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

¿Cómo le pasar múltiples argumentos a la fecha? Es decir, si desea devolver todas las filas donde Fecha = "2007-01-01" O "2007-01-02". – Zach

+1

'subconjunto (DF2, Fecha ==" 2007-01-01 "| Fecha ==" 2007-01-02 ")' –

+0

Lo siento, quise decir como parte de la función read.csv.sql – Zach

Cuestiones relacionadas