lire.csv, en-tête sur la première ligne, passez deuxième ligne

j'ai un fichier CSV avec deux lignes d'en-tête, la première ligne que je veux être l'en-tête, mais la deuxième ligne que je veux jeter. Si je fais la commande suivante:

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

La première ligne devient l'en-tête et la deuxième ligne du fichier devient la première ligne de mon bloc de données:

  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

je veux passer cette deuxième ligne du fichier CSV et juste obtenir

  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

j'ai essayé data <- read.csv("HK Stocks bbg.csv", header = T, stringsAsFactors = FALSE, skip = 1) mais qui renvoie:

        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 ligne d'en-tête vient de la deuxième ligne de mon fichier CSV, pas la première ligne.

je vous Remercie.

23
demandé sur smci 2013-04-07 11:44:49

2 réponses

Ceci devrait faire l'affaire:

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

la première étape en utilisant readLines lit tout le fichier dans une liste où chaque élément dans la liste représente une ligne dans le fichier. Ensuite, vous écartez la deuxième ligne en utilisant le fait que l'indexation négative dans R signifie select all but this index. Enfin, nous nourrir de ces données à read.csv pour le traiter dans un data.frame.

44
répondu Paul Hiemstra 2013-04-07 13:48:50

vous pouvez retirer la première ligne(S) après l'en-tête directement de la dataframe, pour vous permettre de le faire en une seule ligne:

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

si mon fichier "test.txt" est la suivante:

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

cela me donne

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

cela répond exactement à votre question, mais juste pour généraliser la réponse, vous pouvez également sauter le Nème Mth lignes de cette façon:

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

Où N et M sont des nombres entiers de cours.


Remarque: cette méthode convertit toutes les colonnes en facteur.

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
répondu Adrian Tompkins 2018-08-10 09:00:50