2013-08-12 4 views
3

У меня есть «CSV» текстовый файл, в котором каждое поле отделяется от \t&%$#, который я сейчас пытаюсь импортировать в R.Импортировать файл "csv" с разделителем с несколькими символами в R?

В sep= аргумент read.table() instists на один символ. Есть ли быстрый способ напрямую импортировать этот файл?

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

+7

Хотите дать образец беспорядка? Моя мысль была бы, если бы это был один файл, возможно, стоит просто сделать find-replace в исходном файле. Если это действительно грязно, и это не сработает, попробуйте прочитать данные как неструктурированные (например, 'readLines'), а затем с помощью regexp на импортированных символьных строках, что позволит вам отдельно обрабатывать проблемные строки. – Thomas

+0

Не самый лучший, но стоит попробовать: http://stackoverflow.com/questions/15539912/how-to-use-read-csv-or-read-table-to-read-comma-delimited-file-where-fields -have –

ответ

1

Как объяснено в this post, это невозможно в R, не прибегая к синтаксическому анализам строк. Вы можете предварительно проанализировать свой файл на другом языке (Awk, Perl, Python и т. Д.) Или прочитать его по очереди и проанализировать полученные строки в R.

+0

Спасибо - это был другой пост, который я искал. –

4

Следующий код сможет обрабатывать несколько символов разделителя :

#fileName <- file name with fully qualified path 
#separators <- each of them separated by '|' 

read <- function(fileName, separators) { 
    data <- readLines(con <- file(fileName)) 
    close(con) 
    records <- sapply(data, strsplit, split=separators) 
    dataFrame <- data.frame(t(sapply(records,c))) 
    rownames(dataFrame) <- 1: nrow(dataFrame) 
    return(as.data.frame(dataFrame,stringsAsFactors = FALSE)) 
}