Najlepszy sposób na proste przechowywanie danych do analizy statystycznej w języku R [zamknięte]

12

Od pewnego czasu używam plików tekstowych do przechowywania moich danych w R. Ale w ostatnim projekcie rozmiary plików stają się zbyt duże, aby obsłużyć nieprzetworzone pliki tekstowe. Jaka jest najlepsza prosta alternatywa?

Toy Molto
źródło
5
W jaki sposób pliki tekstowe stają się zbyt duże? Czy boisz się o ich uczciwość? Nie możesz ich otworzyć w innym oprogramowaniu? Czy są zbyt wolne, aby je załadować? Za duży na dysk twardy (laptop?)?
Gala
3
+1 Zarządzanie danymi w miarę rozwoju projektów jest powszechnym zagadnieniem w analizie danych (i nie jest specyficzne dla R). Podstawową kwestią jest integralność danych, a nie rozmiar pliku: zaproponowanie jakiejś formy kompresji po prostu zaciemnia to, a nie rozwiązuje.
whuber
Powyżej pewnego rozmiaru txt po prostu nie działa. Mogę dodać dodatkowe dane do pliku txt i załadować je do R, ale dodatkowych danych nie ma w R. (Przy okazji dane są dość bogate, więc kompresja może trochę pomóc, nie doprowadziłaby mnie tak daleko, a ja podejrzewam, że wraz z rozwojem mojego projektu znów skończę z tymi samymi problemami.)
Toy Molto,
Musisz powiedzieć nam więcej o swoich danych, nie ma czegoś takiego jak „najlepszy sposób na uzyskanie dowolnego rodzaju danych”.
zx8754,
Masz na myśli to, read.tableczy read.csvpo cichu zawodzi? Czy jesteś absolutnie pewien, że nie masz kilku plików i jakiś błąd w kodzie (zła ścieżka, zła nazwa pliku itp.)? Aby naprawić pomysły, możesz również dać nam wyobrażenie o tym, ile zmiennych i ile rekordów masz do czynienia w przybliżeniu.
Gala

Odpowiedzi:

10

Standardowym podejściem R jest użycie savei load. Jeśli uruchomisz saveramkę danych po jej zaimportowaniu i dodaniu adnotacji, możesz ją określić, compress=TRUEa będziesz zaskoczony kompresją i szybkim loadczasem. Działa to szczególnie dobrze, jeśli rozmiar obiektu jest mniejszy niż około 400 MB. W przeciwnym razie sprawdź niektóre z powyższych sugestii lub potężny ffpakiet w R.

HmiscPakiet ma małe owijarki Savei Loadaby jeszcze bardziej bezbolesne powyżej:

mydata <- csv.get(...)  # Hmisc package, has several options
Save(mydata)   # writes mydata.rda to current working directory
....
Load(mydata)   # reads mydata.rda and creates mydata data frame
Frank Harrell
źródło
9

Spójrz na bazy danych SQLite3. Każda baza danych jest plikiem, więc nie wymaga konfigurowania serwera bazy danych.

Aby utworzyć bazę danych:

$ sqlite3 my_db.db3
> CREATE TABLE my_table ( col1 TEXT );

Do użytku z R, https://gist.github.com/lynaghk/1062939

momeara
źródło
+1 Korzystanie z rzeczywistej bazy danych jest ogromnym krokiem we właściwym kierunku.
whuber
Czy byłoby to odpowiednie narzędzie? cran.r-project.org/web/packages/RSQLite/index.html
EngrStudent
Dzięki, spróbuję tej trasy. Spojrzałem też na MySQL, ale wydaje się, że jest więcej niż potrzebuję.
Toy Molto,
4

Istnieje wiele ogólnych opcji.

  • Możesz skompresować tekst.
  • Możesz napisać tekst dwójkowo, a nie pisać w ascii

Świetna kompresja zależy od danych.

Domyślam się (i nie określiłeś, więc zgaduję), że chcesz przechowywać dane podobne do arkusza kalkulacyjnego w czymś innym niż csv (rozdzielany przecinkami).

Jednym z moich ulubionych formatów (uwielbiam MatLab) jest hdf.

Oto informacje związane z R dotyczące HDF:

Jest to format przechowywania danych o superkomputerach o dużej gęstości. Może być bardzo szybki i wydajny. Jest także (co nie dziwi) gęstszy niż spakowany tekst.

EngrStudent
źródło
3

Standardowe funkcje odczytu plików w R będą teraz automatycznie łatwo odczytywać pliki spakowane gzip. Więc po prostu uruchom prostą kompresję gzip na swoich danych i czytaj jak zawsze, jakby to był zwykły tekst.

read.table('myfile.gz')
Jan
źródło
Schludny! Nie wiedziałem tego. Dziękuję Ci.
EngrStudent