Czytaj.csv, nagłówek w pierwszej linii, pomiń drugą linię [duplikat]

to pytanie ma już odpowiedzi tutaj : Jak mogę odczytać nagłówek, ale także pominąć wiersze-read.tabela()? (5 odpowiedzi) Zamknięte 1 rok temu.

Mam plik CSV z dwoma wierszami nagłówka, pierwszy wiersz chcę być nagłówkiem, ale drugi wiersz chcę odrzucić. Jeśli wykonam następujące polecenie:

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

Pierwszy wiersz staje się nagłówkiem, a drugi wiersz pliku staje się pierwszym wierszem mojej ramki 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 wiersz pliku CSV i po prostu uzyskać

  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 to 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 drugiej linii pliku CSV, a nie z pierwszej linii.

Dziękuję.
Author: smci, 2013-04-07

3 answers

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)

Pierwszy krok za pomocą readLines wczytuje cały plik do listy, gdzie każda pozycja na liście reprezentuje linię w pliku. Następnie odrzuca się drugi wiersz używając faktu, że indeksowanie ujemne w R oznacza select all but this index. Na koniec przekazujemy te dane read.csv, aby przetworzyć je na data.frame.

 54
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/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-07 13:48:50

Możesz usunąć pierwszą linię(pierwsze linie) po nagłówku bezpośrednio z ramki danych, aby umożliwić Ci to w jednej linii:

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

If my datafile " test.txt " jest następująca:

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

To dokładnie odpowiada na twoje pytanie, ale aby uogólnić odpowiedź, Możesz również pominąć N th do M th linii w ten sposób:

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

Gdzie N I M są liczbami całkowitymi.


Uwaga: ta metoda będzie Konwertuj wszystkie kolumny na współczynnik.

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
 5
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/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-10 09:00:50

Na Linuksie (lub Mac) możesz skorzystać z możliwości używania poleceń Linuksa w data.table::fread, więc

data.table::fread("sed -e '2d' myfile.txt", data.table = F)

Pominie drugą linię.

 1
Author: daknowles,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-10-10 04:56:36