Как удалить обратную перевозку на R - PullRequest
0 голосов
/ 07 мая 2018

Я хотел бы импортировать данные в R из файла, в котором некоторые записи разделены на две части. Данные поступают из базы данных экспорта, и вполне вероятно, что пользователи вводят возврат каретки в текстовом поле. Записи были правильно интегрированы в базу данных, поскольку она была получена в формате XML. Проблема возникает при экспорте, когда возврат каретки восстанавливается в текстовом файле в формате CSV2

Вот иллюстративный вымышленный пример

«Шмель»; "канюк"; "утка"; "канарейка"; "карп"; "олень"; "Замша" "Птица"; "Лошадь"; "Собака"; "Курица"; "Кошка"; "a"

"рыба"; "пчела"
"баранина"; "Орел"; "жаворонок"; "страус"; "бар"; "вальдшнеп"; "буйвол".

Вторая запись обрезается в шестом поле, "a" в строке 2, затем в строке 3 "рыба"; "пчела".

Если бы у вас было решение (кроме удаления каретки вручную), чтобы иметь возможность правильно импортировать данные этого типа в R.

Заранее спасибо! Мари.

1 Ответ

0 голосов
/ 07 мая 2018

Может быть достигнуто решение с использованием пакетов readLines и dplyr. Поскольку OP не предоставил четкого правила для определения полноты строки, следовательно, приведенное ниже решение предполагает, что row завершено, если оно заканчивается на ;.

A) Раствор для содержания filedata.txt:

library(dplyr)

df <- data.frame(fileText = readLines("filedata.txt"), stringsAsFactors = FALSE)

tidy_text <- df %>% mutate(IsComplete = grepl(";$",df$fileText)) %>%
  group_by(SameRow = cumsum(lag(IsComplete, default=1))) %>%
  summarise(fileText = paste0(trimws(fileText), collapse=" "))

Результат:

tidy_text$fileText
#[1] "\"a bumblebee\"; \"a buzzard\"; \"a duck\"; \"a canary\"; \"a carp\"; \"a deer\"; \"a chamois\" \"A \"bird\"; \"a horse\";"                                
#[2] "\"a dog\"; \"a hen\"; \"a cat\"; \"a\" \"fish\"; \"a bee\" \"A lamb\"; \"an eagle\"; \"a lark\"; \"an ostrich\"; \"a bar\"; \"a woodcock\"; \"a buffalo\";"

Данные: Содержание filedata.txt

"a bumblebee"; "a buzzard"; "a duck"; "a canary"; "a carp"; "a deer"; "a chamois" "A "bird"; "a horse";
"a dog"; "a hen"; "a cat"; "a"
"fish"; "a bee"
"A lamb"; "an eagle"; "a lark"; "an ostrich"; "a bar"; "a woodcock"; "a buffalo";

B) Раствор для содержания filedata2.txt. Каждый ряд / наблюдение начинается с extraction;

df <- data.frame(fileText = readLines("filedata2.txt"), stringsAsFactors = FALSE)
tidy_text2 <- df %>% mutate(IsComplete = lead(grepl("^extraction;.*", df$fileText),
               default = TRUE)) %>%
               group_by(SameRow = cumsum(lag(IsComplete, default=1))) %>%
               summarise(fileText = paste0(trimws(fileText), collapse=" "))

Результат № 2: Данные обобщены в 3 наблюдениях.

tidy_text2
# A tibble: 3 x 2
#    SameRow fileText                                                                                 
#      <int> <chr>                                                                                    
# 1       1 extraction;xxxx bvbbv ncnncbvbbv;fdrggggqggqhh;-276654.00;;-657321.00                    
# 2       2 extraction;fhdh bvbbv dsmfdjjf fdhhhhdf;hqshfdsjf sdkfjdfjkdkfj ;;-547743.00,-432743.00  
# 3       3 extraction;shdfgqs bvbbv dsmfdjjf fdhhhhdf;hqshfdsjf sdkfjdfjkdkfj;;-547743.00;-432743.00

Данные: Содержимое filedata2.txt

extraction;xxxx bvbbv ncnncbvbbv;fdrggggqggqhh;-276654.00;;-657321.00
extraction;fhdh bvbbv dsmfdjjf
fdhhhhdf;hqshfdsjf sdkfjdfjkdkfj
;;-547743.00,-432743.00 
extraction;shdfgqs bvbbv dsmfdjjf fdhhhhdf;hqshfdsjf sdkfjdfjkdkfj;;-547743.00;-432743.00
...