str_replace_all () не обнаружит возврат или новую строку "\\ r \\ n" - PullRequest
2 голосов
/ 28 апреля 2020

Я загружаю файл .csv в виде строки на R с помощью readLines (). Один из столбцов содержит твиты с нежелательными переносами строк.

Мне нужно удалить разрывы строк. В Notepad ++ работает Поиск: \r\n и Замена на %%%, и весь файл превращается в одну строку.

Однако при выполнении этого в R ни str_replace_all(), ни str_remove_all() не обнаружат \\r\\n, и выходной файл будет идентичен входному. Это мой код Я пробовал следующее RegEx: "\n"; "\r\n"; "\\n"; "\\r\\n"; "\\r" безрезультатно.

tx  <- readLines("line_breaks.csv", warn = FALSE)

tx <- str_replace_all(tx, "\\r\\n", "")

write_lines(tx, "C:/Users/u0126720/Documents/csv_test/one_line.csv")

Я также пробовал:

tx <- str_remove_all(tx, "\\r\\n")

Входной файл выглядит так:

date,tweet
Wed Jun 19 2019, Como pretendia ser un angel , estando rodeada de demonios? ✨

Rp.?

hola, estas en la olla?"

Желаемый вывод (и что я получаю с помощью Notepad ++):

Wed Jun 19 2019, Como pretendia ser un angel , estando rodeada de demonios? ✨Rp.?hola, estas en la olla?"

Ответы [ 4 ]

1 голос
/ 30 апреля 2020

В моем случае мне нужно было убедиться, что в твите есть одна строка, т. Е. Мне нужно было удалить все CRLF, кроме тех, которые были до строки, начинающейся с первого столбца, то есть даты. Я решил это, используя заполнитель %%% вместо LF, а затем добавив LF перед каждой ячейкой столбца даты, используя gsub() и Регулярное выражение:

tx <- paste(readLines("C:/Users/u0126720/Documents/csv_test/test.csv", encoding="UTF-8"), collapse="%%%")
tx <-gsub("(*UCP)(*UTF)%%%([S|M|T|W|F]{1}[u|o|e|h|r|a]{1}[n|e|d|u|i|t]{1} [J|F|M|A|S|O|N|D]{1}[a|e|p|u|c|o]{1}[n|b|r|y|l|g|p|t|v|c]{1})", "\n\\1", tx, ignore.case = FALSE, perl=TRUE, fixed=FALSE)

Это приводит к следующее:

date, tweet
Wed Jun 19 2019, Como pretendia ser un angel , estando rodeada de demonios? ✨Rp.?hola, estas en la olla?"
Wed Jun 19 2019, RT @ignacioschmied: Mi hermano @maitan_69 está realizando

et c.

1 голос
/ 29 апреля 2020

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

Если ваш файл является правильно отформатированным CSV-файлом, то вы должны иметь возможность читать его как csv даже с CRLF внутри данных.

tx  <- read.csv("line_breaks.csv", colClasses= stringsAsFactors = FALSE)

Однако из вашего входного файла-примера выглядит, что csv сформирован неправильно (он пропускает " после первой запятой) в строке 2.

РЕДАКТИРОВАТЬ: в вашем случае происходит то, что readLines читает \r\n как новую строку (как и должно быть), а следующий текст помещается в следующую запись вектора \r\n не будет отображаться в tx.

РЕДАКТИРОВАТЬ: Как вы получаете входные файлы? Если вы можете исправить этот метод, так что производит правильные CSV-файлы с цитатами, то R будет счастлив с этим .

0 голосов
/ 28 апреля 2020

У меня это работает для меня с gsub ("\ n", "", tx, fixed = T), который является R base. Вы можете адаптировать его, чтобы удалить оба или запустить его дважды.

0 голосов
/ 28 апреля 2020

Вы должны использовать четыре обратных слеша, чтобы соответствовать sla sh в регулярном выражении R. Это связано с тем, что в регулярных выражениях backsla sh используется для управляющих символов и некоторых подстановочных знаков, а в R backsla sh также используется для управляющих символов. Поэтому, если вы положите "\\r" в R, регулярное выражение увидит его как \r, а затем попытается сопоставить CR. Попробуйте:

tx <- str_replace_all(tx, "\\\\r\\\\n", "")
...