Transpozice datové sady je jednou z takových operací, která reformuje data tak, aby splňovala konkrétní požadavky analýzy. Transponování datové sady zahrnuje obrácené řádky a sloupce datové sady, což má za následek novou datovou sadu s přepínanými sloupci a řádky. R poskytuje některé funkce pro transpozici datové sady. V tomto článku se budeme zabývat různými metodami transpozice pro DataFrames v R.
Příklad 1: Transponujte DataFrame pomocí funkce T() v R
Funkce t() je vestavěná funkce R, která se používá k transpozici DataFrame. Převádí však DataFrame na matici, takže jakýkoli nečíselný sloupec je transformován na znakové řetězce. Pro transpozici DataFrame zvažte následující R skript:
MojeData = data.frame(c1 = c(1, 2, 3, 4, 5),
c2 = c(6, 7, 8, 9, 10),
c3 = c(11, 12, 13, 14, 15))
row.names(MyData) = c('r1','r2','r3','r4','r5')
t (Moje data)
Zde deklarujeme vektor MyData a přiřadíme mu data.frame(). Vložíme ukázková data, která obsahují tři sloupce s hodnotami ve funkci data.frame(). Poté použijeme funkci „row.names()“ a nastavíme názvy řádků pro hodnoty DataFrame „MyData“. Nakonec transponujeme DataFrame „MyData“ pomocí funkce t().
Následující výstup ukazuje transpozici DataFrame, kde se názvy řádků původního DataFrame stanou názvy sloupců transponovaného DataFrame a názvy sloupců původního DataFrame se při transpozici ztratí:
Příklad 2: Transponujte DataFrame pomocí funkce Transpose() v R
Funkci transpose() z balíčku „data.table“ lze také použít k transpozici DataFrame a vrátí DataFrame. Musíme se tedy ujistit, že „data.table“ je nainstalován v R. Pokud není nalezen, můžeme jej nainstalovat pomocí následujícího příkazu:
install.packages('data.table')Nyní můžeme snadno importovat balíček „data.table“, abychom získali přístup k funkci transpose() v R pro transpozici DataFrame. Zvažte následující R kód, kde je funkce transpose() volána k transpozici DataFrame:
df <- data.frame(A = c(1:5),
B = c(6:10),
C = c(11:15))
row.names(df) <- c('r1', 'r2', 'r3', 'r4', 'r5')
df
Zde vytvoříme „df“ DataFrame se třemi sloupci a pěti řádky, kde každý sloupec obsahuje sekvenci čísel od 1 do 5, 6 do 10 a 11 až 15. Navíc přiřazujeme názvy řádků DataFrame pomocí funkce row.names(). Poté vytiskneme původní DataFrame na konzoli.
Původní DataFrame je zobrazen na obrazovce zde:
Dále transponujeme původní „df“ DataFrame přepínáním řádků a sloupců DataFrame.
knihovna(data.tabulka)df_trans <- transpose(df)
rownames(df_trans) <- colnames(df)
colnames(df_trans) <- rownames(df)
df_trans
K tomu nejprve načteme knihovnu „data.table“, která poskytuje nástroje pro práci s tabulkovými daty v R. Poté se z knihovny „data.table“ použije funkce transpose(). Výsledný transponovaný DataFrame je přiřazen nové proměnné, která je „df_t“. Poté přiřadíme názvy sloupců původního „df“ DataFrame jako názvy řádků k transponovanému DataFrame „df_trans“ pomocí funkce rownames(). Poté jsou názvy řádků původního datového rámce „df“ přiřazeny jako názvy sloupců k transponovanému datovému rámci „df_trans“ pomocí funkce colnames().
Ve výstupu je tedy dosaženo původní transpozice DataFrame. Představuje každou buňku v transponovaném DataFrame, ve kterém obsahuje stejnou hodnotu jako odpovídající buňka v původním DataFrame, ale v jiné pozici kvůli transpozici.
Příklad 3: Transponujte DataFrame pomocí funkce Tidyr Library Gather() v R
Balíček tidyr R lze použít k transpozici DataFrame. Tato metoda je užitečná, když chceme převést DataFrame ze širokého na dlouhý formát a poté zpět na široký formát s prohozenými řádky a sloupci. Poskytuje několik funkcí pro transformaci a reorganizaci dat. Předtím si musíme stáhnout balíček tidyr konkrétně pomocí následujícího příkazu:
install.packages('uklizený')Podívejme se na následující R kód. K delší transpozici širokého DataFrame používáme funkci collect() tohoto balíčku:
knihovna (uklízečka)n = 10
tidy_df = data.frame(
ID = c(1:n),
Test1_Marks = c(73, 219, 86, 192, 99,
188, 72, 35, 91, 165),
Test2_Marks = c(217, 89, 66, 334, 99,
101, 108, 233, 45, 300),
Test3_Marks = c(39, 101, 209, 289, 176,
120, 89, 119, 199, 96))
uklizený_df
Zde je „široký“ DataFrame převeden na „dlouhý“ DataFrame pomocí tidyr. Nejprve vytvoříme „tidy_df“ DataFrame se třemi sloupci. Každý z těchto sloupců má 10 hodnot.
Dlouhý DataFrame je zobrazen na následující výstupní obrazovce:
Poté předáme DataFrame „tidy_df“ funkci collect() s operátorem roury „%>%“. Funkce collect() z tidyr se používá k transformaci „tidy_df“ na dlouhý DataFrame. Funkce shromáždit() přijímá vstupy s názvem „Zkoušky“, který označuje nový sloupec obsahující názvy proměnných, které byly vytvořeny při transformaci. „Marks“ určuje sloupec, který shromažďuje „Exam1_Marks“ a „Exam2_Marks“.
dlouhé <- tidy_df %>%shromáždit (zkoušky, známky,
Exam1_Marks:Exam2_Marks)
dlouho
Výstup zobrazí konzoli dlouhý DataFrame, který má nyní „dlouhý“ formát se třemi sloupci:
Příklad 4: Transponujte DataFrame pomocí funkce Pivot_Wider() v R
Další pokročilou funkcí, kterou používáme k transpozici DataFrame, je funkce pivot_wider(). Pivot_wider() je funkce z balíčku tidyr v R, která nám umožňuje transformovat „dlouhý“ DataFrame na „široký“ DataFrame. Funkce má tři hlavní argumenty, které jsou popsány v následujícím kódu R:
knihovna (uklízečka)df <- data.frame(
id = c(1, 2, 3, 1, 2, 3),
var = c('v1', 'v1', 'v1', 'v2', 'v2', 'v2'),
val = c(4, 5, 6, 7, 8, 9)
)
df
Zde nejprve načteme balíček tidyr pomocí funkce library(). Poté nastavíme ukázkový DataFrame do „df“. DataFrame „df“ má tři sloupce, které obsahují různé hodnoty. Ukázkový DataFrame lze vidět v následujícím výstupu:
Poté se funkce pivot_wider() z tidyr použije k transformaci „df“ na „df_wide“.
df_wide <- pivot_wider(df, name_from = var, values_from = val)df_wide
Funkce pivot_wider() zde přebírá tři argumenty. Nejprve je třeba transformovat „df“ DataFrame. Potom argument names_from nastaví název sloupce, který se má použít pro nové názvy proměnných. Nakonec argument values_from určuje název sloupce, který se má použít pro nové hodnoty.
Následující výstup představuje transpozici dlouhého DataFrame do širokého DataFrame:
Závěr
Použili jsme různé způsoby, jak transponovat DataFrame v R. První příklad je nastaven pomocí vestavěné metody t(). Všechny ostatní příklady potřebovaly balíčky importovat, abychom mohli použít jejich funkce pro transpozici DataFrame. Nejlepší způsob použití však závisí na konkrétní situaci a struktuře dat, se kterými pracujete.