2013-04-07 4 views
21

У меня есть файл CSV с двумя строками заголовка, первая строка я хочу быть заголовком, а вторая строка, которую я хочу отменить. Если я следующая команда:read.csv, заголовок в первой строке, пропустить вторую строку

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

Первая строка становится заголовком и вторая строка файла становится первой строкой моего кадра данных:

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 

Я хочу, чтобы пропустить этот второй ряд в CSV файл и просто получить

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 

Я попытался data <- read.csv("HK Stocks bbg.csv", header = T, stringsAsFactors = FALSE, skip = 1) но возвращает:

 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 

Строка заголовка поступает из второй строки моего CSV-файла, а не из первой строки.

спасибо.

+4

Вы можете попробовать двухэтапный подход. Прочитайте данные, начиная с третьей строки без заголовка на первом шаге. Прочитайте только первую строку в виде символьного вектора, а затем добавьте вектор символов в качестве имен данных. – djhurio

+0

Я проверил ваш код, и эта строка работает для меня: df <- read.csv (fname, header = T, stringsAsFactors = FALSE, skip = 1) – andrii

ответ

43

Это должно сделать трюк:

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

Первый шаг с использованием readLines считывает весь файл в списке, где каждый элемент списка представляет собой строку в файле. Затем вы отбрасываете вторую строку, используя тот факт, что отрицательная индексация в R означает select all but this index. Наконец, мы подаем эти данные в read.csv, чтобы обработать их в data.frame.

+0

Спасибо за ваш ответ. Последняя строка 'dat = read.csv (skip_second, header = TRUE, stringsAsFactors = FALSE)' дает мне ошибку 'Ошибка в файле (файл," rt "): недопустимое 'описание' аргумент'. Как заставить read.csv принимать переменную вместо пути к файлу? – mchangun

+2

Кроме того, используйте 'textConnection'. –

+4

В качестве руководителя Paul, этот подход работал блестяще с меньшими файлами (менее 5 МБ), но имел проблемы с большими файлами. Я задал вопрос об этом и дал ответ после того, как он хорошо работал над большими файлами здесь: http://stackoverflow.com/questions/24921387/long-lag-time-importing-large-csvs-in-r-with- заголовок-в-втором ряду –

1

Вы можете раздеться первую строку (ы) после заголовка непосредственно из dataframe, чтобы позволить вам сделать это в одной строке:

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

, если мой файл данных «test.txt» заключается в следующем:

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

это дает мне

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

Это отвечает на ваш вопрос точно, но только обобщить ответ, вы также можете пропустить N-й к М-й линии на этом пути:

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

где N и M являются целыми числами, конечно.

0

Для пропуска второго ряда, вам просто нужно сделать

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

-2 написана для пропуска второго ряда. Если вы хотите пропустить колонку, вы можете написать внутри [, # здесь]

Смежные вопросы