R: удаление заголовков, нижних и нижних заголовков столбцов при чтении CSV-файла

У меня есть куча CSV-файлов, которые мне нужно прочитать. У каждого файла есть заголовок, у большинства - нижние колонтитулы, а у половины - заголовки столбцов, которые время от времени появляются в теле файла. Я хотел бы удалить заголовки, нижний колонтитул и отдельные заголовки столбцов.

Я включил воспроизводимые примеры почти во все мои вопросы и ответы, но в этом случае, поскольку я читаю внешний файл, я не уверен, как это сделать.

Каждый заголовок состоит из трех строк. Я могу удалить заголовок со следующей строкой (которая использует "пропустить"):

d <- read.csv ('c: / users / mark w miller / simple R Programs / data_with_header_footer.csv', header = T, skip = 2)

Количество строк между верхним и нижним колонтитулами варьируется в зависимости от файла. Однако нижний колонтитул всегда начинается со строки "Символы:". Первая строка нижнего колонтитула занимает только первую ячейку этого ряда. Количество строк в нижнем колонтитуле зависит от файла.

Некоторые файлы имеют отдельные заголовки столбцов в теле файла. Первая строка начинается с номера таблицы, например, "Таблица 4.3-1". Последний ряд этих спорадических заголовков всегда начинается с чего-то вроде: "Number_reporting", "Year 1", "Area 1", "Area 2", "Year 2", "Area 1", "Area 2".

Как я могу удалить эти нижние колонтитулы и отдельные заголовки столбцов? Я предпочел бы не редактировать каждый файл вручную, потому что существует большое количество файлов, и могут возникнуть ошибки при удалении большого количества строк вручную.

Спасибо за любые предложения.

1 ответ

Решение

Ты можешь использовать readLines затем grep для соответствующих нижних колонтитулов и заголовков столбцов. Ничего более конкретного трудно привести в пример.

dum.data<-readLines('some.txt')
dum.data<-dum.data[-c(1:3)]

if(length(grep("Symbols:",dum.data))>0){
dum.data<-dum.data[-c(grep("Symbols:",dum.data):length(dum.data))]
}

if(length(grep("Table[0-9].[0-9]".dum.data))>0){
dum.data<-dum.data[-c(grep("Table[0-9].[0-9]".dum.data):app.marker)]
}

app.marker будет подходящим grep для конца вашего спорадического заголовка, который довольно расплывчатый. Как только они будут удалены, вы можете обработать остаток, разделенный запятыми и т. Д. По мере необходимости

Другие вопросы по тегам