2013-04-07 13 views
21

Mam plik CSV z dwoma wierszami nagłówka, pierwszy wiersz chcę być nagłówkiem, ale drugi wiersz chcę odrzucić. Jeśli mam następujące polecenie:read.csv, nagłówek w pierwszej linii, pomiń drugą linię

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

Pierwszy wiersz staje się nagłówek i drugi wiersz pliku staje się pierwszym rzędzie mojej ramce danych:

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 

Chcę pominąć ten drugi rząd z pliku CSV i po prostu

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 

próbowałem data <- read.csv("HK Stocks bbg.csv", header = T, stringsAsFactors = FALSE, skip = 1) ale zwraca:

 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 

Wiersz nagłówka pochodzi z drugiego wiersza pliku CSV, a nie z pierwszego wiersza.

Dziękuję.

+4

Możesz spróbować dwuetapowego podejścia. Przeczytaj dane zaczynające się od trzeciego wiersza bez nagłówka w pierwszym kroku. Czytaj tylko pierwszy wiersz jako wektor znaków, a następnie dodaj wektor znaków jako nazwy danych. – djhurio

+0

Sprawdziłem twój kod i ta linia działa dla mnie: df <- read.csv (fname, header = T, stringsAsFactors = FALSE, skip = 1) – andrii

Odpowiedz

43

To powinno załatwić sprawę:

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

Pierwszym krokiem przy użyciu readLines odczytuje całą zawartość pliku do listy, gdzie każda pozycja na liście reprezentuje linię w pliku. Następnie odrzucasz drugą linię, wykorzystując fakt, że indeksowanie ujemne w R oznacza select all but this index. Na koniec przekazujemy te dane do read.csv, aby przetworzyć je na data.frame.

+0

Dziękuję za odpowiedź. Ostatni wiersz 'dat = read.csv (skip_second, nagłówek = TRUE, stringiAsFactors = FALSE)' daje mi błąd 'Błąd w pliku (file," rt "): nieprawidłowy argument 'description'. Jak mogę uzyskać read.csv, aby zaakceptować zmienną zamiast ścieżki do pliku? – mchangun

+2

Ponadto użyj 'textConnection'. –

+4

Jako szef Paul, podejście to działało znakomicie przy mniejszych plikach (mniej niż 5 MB), ale miało problemy z większymi plikami. Zadałem pytanie na ten temat i dostarczyłem odpowiedź po tym, jak to działa ładnie na większych plikach tutaj: http://stackoverflow.com/questions/24921387/long-lag-time-importing-large-csvs-in-r-- nagłówek w drugim rzędzie –

1

Można rozebrać pierwszą linię (y) po nagłówku bezpośrednio z dataframe, co pozwala zrobić to w jednym wierszu:

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

jeśli mój datafile „test.txt” jest następujący:

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

to daje mi

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

ta odpowiada dokładnie na to pytanie, ale tylko uogólnić Odpowiedź można również pominąć N th do M liniach miejscu w ten sposób:

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

gdzie N i M są liczbami całkowitymi oczywiście.

0

Dla omijając drugi wiersz, po prostu trzeba zrobić

data = read.csv("Filename.csv", header = T)[-2,] 

-2 jest napisany dla omijając drugiego rzędu. Jeśli chcesz pominąć kolumnę, możesz pisać wewnątrz [, # tutaj]

Powiązane problemy