Leer.csv, encabezado en primera línea, omitir segunda línea


Tengo un archivo CSV con dos filas de encabezado, la primera fila quiero ser el encabezado, pero la segunda fila quiero descartar. Si hago el siguiente comando:

data <- read.csv("HK Stocks bbg.csv", header = T, stringsAsFactors = FALSE)

La primera fila se convierte en el encabezado y la segunda fila del archivo se convierte en la primera fila de mi marco de datos:

  Xaaaaaaaaa       X X.1     Xbbbbbbbbbb     X.2 X.3
1         Date PX_LAST  NA         Date PX_LAST  NA
2   31/12/2002  38.855  NA   31/12/2002  19.547  NA
3   02/01/2003  38.664  NA   02/01/2003  19.547  NA
4   03/01/2003  40.386  NA   03/01/2003  19.547  NA
5   06/01/2003  40.386  NA   06/01/2003  19.609  NA
6   07/01/2003  40.195  NA   07/01/2003  19.609  NA

Quiero omitir esta segunda fila del archivo CSV y simplemente obtener

  X1.HK.Equity       X X.1 X2.HK.Equity     X.2 X.3
2   31/12/2002  38.855  NA   31/12/2002  19.547  NA
3   02/01/2003  38.664  NA   02/01/2003  19.547  NA
4   03/01/2003  40.386  NA   03/01/2003  19.547  NA
5   06/01/2003  40.386  NA   06/01/2003  19.609  NA
6   07/01/2003  40.195  NA   07/01/2003  19.609  NA

Lo intenté data <- read.csv("HK Stocks bbg.csv", header = T, stringsAsFactors = FALSE, skip = 1) pero eso vuelve:

        Date PX_LAST  X     Date.1 PX_LAST.1 X.1
1 31/12/2002  38.855 NA 31/12/2002    19.547  NA
2 02/01/2003  38.664 NA 02/01/2003    19.547  NA
3 03/01/2003  40.386 NA 03/01/2003    19.547  NA
4 06/01/2003  40.386 NA 06/01/2003    19.609  NA
5 07/01/2003  40.195 NA 07/01/2003    19.609  NA
6 08/01/2003  40.386 NA 08/01/2003    19.547  NA

La fila de encabezado proviene de la segunda línea de mi archivo CSV, no de la primera alinear.

Gracias.

Author: smci, 2013-04-07

2 answers

Esto debería hacer el truco:

all_content = readLines("file.csv")
skip_second = all_content[-2]
dat = read.csv(textConnection(skip_second), header = TRUE, stringsAsFactors = FALSE)

El primer paso usando readLines lee todo el archivo en una lista, donde cada elemento de la lista representa una línea en el archivo. A continuación, descarta la segunda línea usando el hecho de que la indexación negativa en R significa select all but this index. Finalmente, alimentamos estos datos a read.csv para procesarlos en un data.frame.

 44
Author: Paul Hiemstra,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-07 13:48:50

Puede eliminar la(s) primera (s) línea (s) después del encabezado directamente desde el dataframe, para permitirle hacer esto en una línea:

df<-read.csv("test.txt",header=T)[-1,]

Si mi archivo de datos "prueba.txt " es lo siguiente:

var1, var2
units1, units2
2.3,6.8
4.5,6.7

Esto me da

> read.csv("test.txt",header=T)[-1,]
var1 var2
2  2.3  6.8
3  4.5  6.7

Esto responde a tu pregunta exactamente, pero solo para generalizar la respuesta, también puedes saltar las Nth a las Mth líneas de esta manera:

df<-read.csv("test.txt",header=T)[-N:-M,]

Donde N y M son enteros, por supuesto.


Nota: Este método convierta todas las columnas en factor.

str(read.csv("test.csv", header = TRUE)[-1,])
# 'data.frame': 2 obs. of  2 variables:
#   $ var1: Factor w/ 3 levels "2.3","4.5","units1": 1 2
#   $ var2: Factor w/ 3 levels " units2","6.7",..: 3 2
 2
Author: Adrian Tompkins,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-10 09:00:50