VLOOKUP v R - malá funkce, velká pomoc
Protože vím, že číst hodně písmenek většinu z Vás nebaví, ale přesto chcete se dozvědět něco přínosného, nápomocného a skvělého, tak tentokrát to pojímám trochu jinak, a tedy podobné touhy bych měl snad uspokojit.
Dnes si ukážeme, jak v Rku dosáhnout stejné funkcionality, jakou poskytuje VLOOKUP v Excelu nebo JOIN operace v SQL. V R je to podobně jednoduché a podobně účinné. Příklad použiji tentokrát jen demonstrativní a prostý (s Vaším dovolením, časový úsek pro sepsání postu je velmi krátký). Na konci ale popíšu aplikaci v obdobném, ale nevyhnutelném případě, kdy tato funkce udělá dost práce a nevyžádá si víc než pár řádek kódu.
Takže... jak se to vlastně v tom Rku udělá? Ve skutečnosti jedním příkazem - je to funkce merge(). Takto ji můžete zavolat - stačí 3 nejdůležitější parametry:
Tedy musíte specifikovat, který objekt se kterým se má propojit a dle jakého sloupce. POZOR: kolonka ve výchozím a cílovém objektu musí mít stejný název. Kdybyste to porušili, R Vás stejně samo napomene (přesněji error handling uvnitř funkce).
Uvedeme tedy příklad. Máme dvě tabulky (data framy). Jedna obsahuje záznamy o značce auta a naměřeném výkonu (nějakého konkrétního exempláře), v další tabulce máme uvedeny průměrné kilowattové výkony těchto značek. Vaší úlohou může být např. posouzení, zda naměřené hodnoty jsou nadprůměrné, či např. použití průměrů místo konkrétních hodnot u každého pozorování.
Dále máte tabulka průměrů:
Pro dotažení průměrů k jednotlivým pozorováním stačí použít:
Porovnání dvou sloupců mezi sebou je už pak nasnadě:
Pro co je tato funkce silně přínosná? Např. pro tvorbu/převod datasetu s kvalitativními proměnnými na jejich WOE reprezentaci (Weight Of Evidence, více např. zde). Výsledek funkce Vám v R vrátí WOE hodnotu pro každou kategorii kvalitativní proměnné (podobně jako naše tabulka průměrných výkonů). Pro odhad např. LOGITu pak ale potřebujete hodnoty v původním datasetu nahradit WOE. To v mžiku provedete právě pomocí merge().
POZOR: pro změnu typu JOINu je potřeba použít atribut all (více v dokumentaci).
Přeji úspěšné MERGEování.