Sposoby odczytu tylko wybranych kolumn z pliku do R? (Wesołe medium między " Czytaj.table ' i 'scan'?) [duplikat]
To pytanie ma już odpowiedź tutaj:
- czytaj tylko ograniczoną liczbę kolumn 3 odpowiedzi
Mam bardzo duże rozdzielane Pliki Danych i chcę przetwarzać tylko niektóre kolumny w R bez poświęcania czasu i pamięci na tworzenie data.frame
dla całego pliku.
Jedyne opcje jakie znam to {[1] } które są bardzo marnotrawne kiedy chcę tylko kilka kolumn lub scan
, które wydają się zbyt niski poziom dla tego, czego chcę.
Czy jest lepsza opcja, albo z czystym R, albo może wywołanie innego skryptu powłoki do ekstrakcji kolumn, a następnie za pomocą skanowania lub odczytu.tabela wyników? (Co prowadzi do pytania jak wywołać skrypt powłoki i uchwycić jego wyjście w R?).
4 answers
Czasami robię coś takiego, gdy mam dane w pliku rozdzielanym tabulatorami:
df <- read.table(pipe("cut -f1,5,28 myFile.txt"))
To pozwala cut
dokonać wyboru danych, co może zrobić bez użycia dużej ilości pamięci.
Zobacz Tylko odczyt ograniczonej liczby kolumn dla wersji czystej R, używając "NULL"
w argumencie colClasses
do read.table
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-06 15:47:02
Jedną z możliwości jest użycie pipe()
zamiast nazwy pliku i posiadanie awk
lub podobnych filtrów wyodrębnia tylko te kolumny, które chcesz.
Zobacz help(connection)
aby dowiedzieć się więcej o pipe
i przyjaciołach.
Edytuj: read.table()
można to również zrobić za Ciebie, jeśli jesteś bardzo wyraźny o colClasses - wartość NULL dla danej kolumny pomija kolumnę alltogether. Zobacz help(read.table)
. Mamy więc rozwiązanie w base R bez dodatkowych pakietów i narzędzi.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-03 17:59:53
Myślę, że podejście Dirka jest proste i szybkie. Alternatywą, której użyłem, jest załadowanie danych do sqlite, który ładuje się znacznie szybciej niż odczyt.table (), a następnie wyciągnij tylko to, co chcesz. pakiet sqldf () ułatwia to wszystko. Oto link {[2] } do poprzedniej odpowiedzi na przepełnienie stosu, która zawiera przykłady kodu dla sqldf ().
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:25:06
Jest to prawdopodobnie więcej niż potrzebujesz, ale jeśli pracujesz na bardzo dużych zestawach danych , Możesz również przyjrzeć się Pakietowi HadoopStreaming, który zapewnia rutynę map-reduce za pomocą Hadoop.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-03 17:16:20