R: pobranie pliku CSV z jedną uszkodzoną linijką

2-Lut-2020

Instrukcje dostępne w języku R (ale też w innych), po cichu zakładają, że dane na jakich pracują są czyste. Pisząc czyste, mam na myśli o ustalonej strukturze. Niestety, może  się zdarzyć, że jedna linijka znajdująca się gdzieś pośrodku jest… uszkodzona. Pobranie całego pliku kończy się wtedy błedem. Oto przykład:

Gdyby takie dane były dostarczane przez np. inny dział firmy, najprościej byłoby się z nimi skontaktować i zwrócić uwagę na nieprawidłowo utworzony plik. Jeśli jednak takiej możliwości nie ma… można próbować obejść problem.

Propozycja nr 1 – opuśćmy uszkodzoną linijkę

Skorzystamy z parametrów nrow (ile wierszy pobrać) oraz skip (ile opuścić). Aby pobrać pierwsze 292 wiersze uruchom

A  żeby pobrać od 294 linijki:

Gdyby przyszło Ci do głowy sprawdzenie takiej niepoprawnej linijki, możesz pobrać tylko ją:

Jeśli dokładniej przyjrzeć się tej linijce stanie się jasne, że chodzi tam o to, że jeden z separatorów jest tabulatorem zamiast spacją. I tak dochodzimy do

Porpozycji nr 2 – pobranie pliku tekstowego i jego oczyszczenie

Zaczynamy od pobrania danych do zmiennej lokalnej, ale sam plik jest czytany po prostu jako tekst, bez żadnej interpretacji:

Mając tekst w zmiennej, można go oczyścić. Będzie to polegało na zamianie tabulatora na spację. Zaraz potem, oczyszczony tekst można zapisać lokalnie:

A mając lokalny plik, można go wczytać korzystając z oryginalnego polecenia fread:

 

Dodaj komentarz:

Autor: Rafał Kraik