R Academy · Oppitunti

Pitkästä leveäksi pivot_wider()-funktiolla

Levittäkää avain–arvo-parit takaisin leveän esityksen taulukoiksi.

Oppitunti 2/413 vaihetta

Pitkästä leveäksi pivot_wider()-funktiolla on ilmainen R Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu R Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. R Academy-kurssilla on yhteensä 4 oppituntia.

Milloin kannattaa käyttää leveää muotoa

Vaikka pitkä muoto sopii analyysiin, leveää muotoa tarvitaan usein raporteissa, taulukkolaskennassa ja tietyissä algoritmeissa (esimerkiksi korrelaatiomatriiseissa). pivot_wider() on pivot_longer()-funktion käänteisfunktio — se levittää sarakkeen arvot useiksi uusiksi sarakkeiksi.

library(tidyr)

# Long format: one row per student-quarter combination
long_df <- data.frame(
  student = c('Alice','Alice','Alice','Bob','Bob','Bob'),
  quarter = c('Q1','Q2','Q3','Q1','Q2','Q3'),
  score = c(85, 88, 92, 90, 85, 88)
)

print(long_df)
cat('\n', nrow(long_df), 'rows x', ncol(long_df), 'cols')

pivot_wider() — perusteet

pivot_wider(df, names_from, values_from) muuntaa pitkän muodon leveäksi. names_from määrittää sarakkeen, jonka arvoista tulee uusien sarakkeiden nimiä; values_from määrittää sarakkeen, jonka arvot täyttävät kyseiset uudet sarakkeet.

library(tidyr)

long_df <- data.frame(
  student = c('Alice','Alice','Alice','Bob','Bob','Bob'),
  quarter = c('Q1','Q2','Q3','Q1','Q2','Q3'),
  score = c(85, 88, 92, 90, 85, 88)
)

wide_df <- pivot_wider(
  long_df,
  names_from = quarter,
  values_from = score
)

print(wide_df)

id_cols — Rivien avainten määrittäminen

id_cols määrittää sarakkeet, jotka yksilöivät jokaisen leveän tulostaulun rivin. Oletusarvoisesti dplyr käyttää kaikkia sarakkeita, joita ei ole määritetty names_from- tai values_from-argumenteissa. Sen määrittäminen eksplisiittisesti estää odottamattoman ryhmittelyn.

library(tidyr)

df <- data.frame(
  year = c(2023,2023,2024,2024),
  region = c('East','West','East','West'),
  quarter = c('Q1','Q1','Q1','Q1'),
  revenue = c(100, 200, 120, 220)
)

pivot_wider(
  df,
  id_cols = c(year, quarter),
  names_from = region,
  values_from = revenue
)

values_fill — Puuttuvien yhdistelmien käsittely

Kun kaikkia id_cols- ja names_from-sarakkeiden yhdistelmiä ei ole olemassa, tuloksena olevan solun arvoksi tulee NA. Korvatkaa nämä puuttuvat arvot oletusarvolla (esimerkiksi 0 lukumääriä tai summia varten) käyttämällä values_fill-argumenttia.

library(tidyr)

df <- data.frame(
  product = c('A','A','B'),
  channel = c('online','store','online'),
  sales = c(100, 150, 200)
)

# 'B' has no 'store' data — fill with 0
pivot_wider(
  df,
  names_from = channel,
  values_from = sales,
  values_fill = 0
)

names_prefix — Etuliitteiden lisääminen

Lisätkää names_prefix-argumentilla merkkijono kaikkien uusien sarakenimien alkuun. Tämä auttaa välttämään ongelmia, kun names_from-arvot ovat lukuja, tai kun sarakenimistä halutaan kuvaavampia.

library(tidyr)

df <- data.frame(
  student = c('Alice','Alice','Bob','Bob'),
  quarter = c(1, 2, 1, 2),
  score = c(85, 90, 78, 82)
)

# Without prefix: columns named '1' and '2' (problematic)
# With prefix: q1, q2
pivot_wider(
  df,
  names_from = quarter,
  values_from = score,
  names_prefix = 'q'
)

Useita values_from-sarakkeita

Voitte kääntää useita arvosarakkeita kerralla välittämällä vektorin values_from-argumentille. Tuloksena olevat sarakkeet nimetään muodossa value_name, jossa yhdistyvät arvosarakkeen nimi ja luokka.

library(tidyr)

df <- data.frame(
  region = c('East','East','West','West'),
  period = c('Q1','Q2','Q1','Q2'),
  revenue = c(100, 120, 200, 210),
  units = c(10, 12, 20, 22)
)

pivot_wider(
  df,
  names_from = period,
  values_from = c(revenue, units)
)

Kaksoiskappaleiden käsittely values_fn-argumentilla

Jos samalla id- ja name-yhdistelmällä on useita arvoja, pivot_wider ei tiedä, mitä niistä pitäisi käyttää, ja palauttaa varoituksen kera listasarakeen. Ratkaiskaa tilanne määrittämällä yhdistämisfunktio values_fn-argumentilla.

library(tidyr)

# Duplicate rows: Alice has two Q1 scores
df <- data.frame(
  student = c('Alice','Alice','Alice','Bob','Bob'),
  quarter = c('Q1','Q1','Q2','Q1','Q2'),
  score = c(85, 87, 90, 78, 82)
)

# Resolve duplicates by taking the mean
pivot_wider(
  df,
  names_from = quarter,
  values_from = score,
  values_fn = mean
)

values_fn nimetyn listan kanssa

Välittäkää nimetty lista values_fn-argumentille, kun haluatte käyttää eri arvosarakkeisiin samanaikaisesti eri yhdistämisfunktioita. Tämä on hyödyllistä, kun useita arvosarakkeita käännetään ja ne tarvitsevat erilaiset yhteenvetomenetelmät.

library(tidyr)

df <- data.frame(
  region = c('East','East','West','West'),
  period = c('Q1','Q1','Q1','Q1'),
  revenue = c(100, 120, 200, 210),
  orders = c(10, 12, 20, 22)
)

pivot_wider(
  df,
  names_from = period,
  values_from = c(revenue, orders),
  values_fn = list(revenue = sum, orders = sum)
)

Ristiintaulukointien luominen

Ristiintaulukointi (kontingenssitaulukko) voidaan luoda helposti data frame -muodossa käyttämällä pivot_wider()-funktiota sen jälkeen, kun aineisto on laskettu dplyr::count()-funktiolla. Näin yhdistetään molempien pakettien teho frekvenssianalyysissä.

library(tidyr)
library(dplyr)

survey <- data.frame(
  dept = c('HR','HR','Eng','Eng','HR','Eng'),
  response = c('Yes','No','Yes','Yes','Yes','No')
)

survey %>%
  count(dept, response) %>%
  pivot_wider(
    names_from = response,
    values_from = n,
    values_fill = 0
  )

Edestakainen muunnos: pitkä → leveä → pitkä

pivot_longer()- ja pivot_wider()-funktioiden käänteisen suhteen ymmärtäminen auttaa havaitsemaan virheitä. Edestakaisen muunnoksen (pitkä→leveä→pitkä) pitäisi palauttaa alkuperäiset tiedot rivi järjestystä ja tyyppimuunnoksia lukuun ottamatta.

library(tidyr)

original_long <- data.frame(
  id = c(1,1,2,2),
  key = c('a','b','a','b'),
  value = c(10, 20, 30, 40)
)

# Go wide
wide <- pivot_wider(original_long, names_from=key, values_from=value)
print(wide)

# Go long again
pivot_longer(wide, -id, names_to='key', values_to='value')

Käytännössä: tulosraportti

Tyypillinen käyttötapaus on muuntaa kokeiden tuloksia sisältävä pitkä taulukko opiskelijoiden ja oppiaineiden mukaan järjestetyksi raporttitaulukoksi. Yhdistämällä tähän dplyr::arrange()- ja rename()-funktiot saatte selkeän ja esityskelpoisen tuloksen.

library(tidyr)
library(dplyr)

scores <- data.frame(
  student = c('Alice','Alice','Bob','Bob','Carol','Carol'),
  subject = c('Math','Science','Math','Science','Math','Science'),
  score = c(92, 88, 85, 91, 79, 83)
)

scores %>%
  pivot_wider(names_from=subject, values_from=score) %>%
  mutate(average = round((Math + Science) / 2, 1)) %>%
  arrange(desc(average))

Pikatarkistus

Mitä tapahtuu, kun kutsutte pivot_wider()-funktiota ja samalla id- ja name-yhdistelmällä on useita arvoja?

Kertaus: pivot_wider()

Keskeiset asiat muunnoksessa pitkästä muodosta leveään:

  • pivot_wider(names_from, values_from) levittää avainsarakkeen useiksi uusiksi sarakkeiksi
  • id_cols määrittää, mitkä sarakkeet yksilöivät kunkin rivin
  • values_fill = 0 (tai mikä tahansa skalaari) täyttää puuttuvat yhdistelmät
  • names_prefix lisää merkkijonon alkuun ja auttaa välttämään numeeriset tai epäselvät sarakenimet
  • values_fn ratkaisee päällekkäiset soluarvot yhdistämisfunktion avulla
  • Välittämällä vektorin values_from-argumentille voitte kääntää useita arvosarakkeita samanaikaisesti
  • Käyttäkää funktiota count()-funktion jälkeen ristiintaulukointien tehokkaaseen luomiseen
library(tidyr)
library(dplyr)

data.frame(
  region = c('East','East','West','West'),
  metric = c('revenue','units','revenue','units'),
  value = c(100, 10, 200, 20)
) %>%
  pivot_wider(
    names_from = metric,
    values_from = value,
    values_fill = 0
  ) %>%
  mutate(revenue_per_unit = revenue / units)
Aloita maksutta

Opi R tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
43
Oppitunnit
159

Usein kysytyt kysymykset

Onko oppitunti ”Pitkästä leveäksi pivot_wider()-funktiolla” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa R Academy-oppimispolun 3 oppituntia, myös oppitunnin “Pitkästä leveäksi pivot_wider()-funktiolla”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. R Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Pitkästä leveäksi pivot_wider()-funktiolla”?

Levittäkää avain–arvo-parit takaisin leveän esityksen taulukoiksi. Harjoittelet R Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni R Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin R Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.

Kuinka kauan ”Pitkästä leveäksi pivot_wider()-funktiolla”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä R Academy-oppitunnilla?

Kyllä. Jokainen R Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Leveästä pitkäksi pivot_longer()-funktiolla
  2. Pitkästä leveäksi pivot_wider()-funktiolla
  3. separate() ja unite() merkkisarakkeille
  4. Data framejen sisäkkäistäminen ja purkaminen
← Takaisin: R Academy