2016-08-23 9 views
6

Я хочу, чтобы пропустить 1-й и 3-й строки из моего файла CSV при импорте файла в кадр данных в R.Пропустить конкретные строки, используя read.csv в R

В исходном файле мои заголовки в строке 2

Использование аргумента skip в read.csv Я могу пропустить 1-ю строку и задать аргумент заголовка TRUE, у меня все еще есть 3-я строка из исходного файла в моем фрейме данных.

Может ли кто-нибудь предложить, как пропустить несколько определенных строк в R, ниже - то, что я смог собрать?

Могу ли я передать вектор в аргумент skip, определяющий точные строки, которые нужно игнорировать?

prach <- read.csv("RSRAN104_-_PRACH_Propagation_Delay-PLMN-day-rsran_RU50EP1_reports_RSRAN104_xml-2016_08_23-21_33_03__604.csv", header = TRUE, sep = ",", stringsAsFactors = FALSE, skip = 1) 
+0

мне было бы интересно посмотреть, что говорят другие, но если строка 1 и 3 не пустой вам может понадобиться, чтобы пропустить все 3 и управлять имена заголовков вручную. – Sevyns

+1

Если вы не возражаете, чтобы вручную изменить ваш файл, вы можете использовать символ комментария '' '' '' третьей строке, а затем: 'read.csv (файл, skip = 1, header = T, comment.char = "#") '. – Abdou

+0

Почему бы не пропустить первую строку, начать чтение csv (включая заголовок) из строки 2 и удалить третью строку после read.csv()? – mdiener

ответ

21

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

headers = read.csv(file, skip = 1, header = F, nrows = 1, as.is = T) 
df = read.csv(file, skip = 3, header = F) 
colnames(df)= headers 

Я создал следующий текстовый файл, чтобы проверить это:

do not read 
a,b,c 
previous line are headers 
1,2,3 
4,5,6 

результат:

> df 
    a b c 
1 1 2 3 
2 4 5 6 
0

Мое идеальное решение:

#' read csv table, wrapper of \code{\link{read.csv}} 
#' @description read csv table, wrapper of \code{\link{read.csv}} 
#' @param tolower whether to convert all column names to lower case 
#' @param skip.rows rows to skip (1 based) before read in, eg 1:3 
#' @return returns a data frame 
#' @export 
ez.read = function(file, ..., skip.rows=NULL, tolower=FALSE){ 
    if (!is.null(skip.rows)) { 
     tmp = readLines(file) 
     tmp = tmp[-(skip.rows)] 
     tmpFile = tempfile() 
     on.exit(unlink(tmpFile)) 
     writeLines(tmp,tmpFile) 
     file = tmpFile 
    } 
    result = read.csv(file, ...) 
    if (tolower) names(result) = tolower(names(result)) 
    return(result) 
} 

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

  • Нет связанных вопросов^_^