Pitkästä leveäksi pivot_wider()-funktiolla
Levittäkää avain–arvo-parit takaisin leveän esityksen taulukoiksi.
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 sarakkeiksiid_colsmäärittää, mitkä sarakkeet yksilöivät kunkin rivinvalues_fill = 0(tai mikä tahansa skalaari) täyttää puuttuvat yhdistelmätnames_prefixlisää merkkijonon alkuun ja auttaa välttämään numeeriset tai epäselvät sarakenimetvalues_fnratkaisee 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)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
- Leveästä pitkäksi pivot_longer()-funktiolla
- Pitkästä leveäksi pivot_wider()-funktiolla
- separate() ja unite() merkkisarakkeille
- Data framejen sisäkkäistäminen ja purkaminen