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 для конца вашего спорадического заголовка, который довольно расплывчатый. Как только они будут удалены, вы можете обработать остаток, разделенный запятыми и т. Д. По мере необходимости