Modulelessen (2/2)
Mutaties en aggregaties
Naast selecteren en filteren biedt dplyr krachtige mogelijkheden om nieuwe berekende kolommen te creëren en gegevens samen te vatten door deze in groepen samen te voegen.
Nieuwe kolommen maken: mutate()
Met het werkwoord mutate() kunt u nieuwe kolommen berekenen of bestaande kolommen wijzigen, terwijl alle oorspronkelijke kolommen intact blijven.
# Adds a 'double_salary' column computed as 'salary' multiplied by 2
df %>%
mutate(double_salary = salary * 2)
# You can create multiple columns at once
df %>%
mutate(
total_cost = quantity * price,
tax = total_cost * 0.22
)Groeperen en aggregeren: group_by() en summarise()
Vaak vereist data-analyse het berekenen van samenvattende statistieken (bijvoorbeeld gemiddelde, som, aantal) voor specifieke groepen rijen (bijvoorbeeld het berekenen van het gemiddelde salaris voor elke afdeling).
1. group_by()
Groepeert het gegevensframe op de waarden van een of meer kolommen. Op zichzelf verandert het de visuele weergave van de gegevens niet, maar geeft het aan dplyr aan dat daaropvolgende bewerkingen "groep voor groep" moeten worden uitgevoerd.
2. summarise() (of summarize())
Vouwt veel rijen samen in één overzichtsrij door statistische functies toe te passen zoals mean(), sum(), min(), max() of n() (waarbij rijen worden geteld).
# Calculates the average salary per department
df %>%
group_by(department) %>%
summarise(mean_salary = mean(salary))Als u wilt tellen hoeveel records tot elke groep behoren:
# Counts how many employees are in each city
df %>%
group_by(city) %>%
summarise(count = n())Probeer het zelf
Oefening 1: Maak een berekende kolom
Gegeven het dataframe df, maakt u een nieuwe kolom met de naam total_price door de hoeveelheidskolom te vermenigvuldigen met de prijskolom met behulp van mute(). Sla het resultaat op in df_new.
Toon hint
Gebruik mute(total_price = aantal * prijs) binnen een pijplijn op df.
Oplossing beschikbaar na 3 pogingen
Oefening 2: Groepeer en vat samen met het gemiddelde
Bereken het gemiddelde van de salariskolom, waarbij u de records groepeert op afdelingskolom. Sla de geaggregeerde kolom op met de naam mean_salary en wijs het eindresultaat toe aan df_grouped.
Toon hint
VS df %>% group_by(afdeling) %>% samenvatting(gemiddelde_salaris = gemiddelde(salaris))
Oplossing beschikbaar na 3 pogingen
Oefening 3: Tel elementen per groep
Tel het aantal rijen voor elke stad (stadskolom). Wijs het aantal toe aan de count-variabele binnen summarise() met behulp van de n()-functie, en sla het eindresultaat op in df_counts.
Toon hint
Combineer group_by(stad) met samenvatting(count = n()) in een pijplijn.
Oplossing beschikbaar na 3 pogingen
Oefening 4: Meerdere samenvattingen
Bereken de minimumwaarde (min_price) en maximumwaarde (max_price) van de prijskolom, gegroepeerd op de categoriekolom. Sla het resultaat op in df_summary.
Toon hint
Binnen summarise(), scheidt u de statistieken min_price = min(price) en max_price = max(price) met een komma.
Oplossing beschikbaar na 3 pogingen
Oefening 5: Filters groeperen en combineren
Schrijf een pijplijn die df groepeert op de afdelingskolom, berekent het gemiddelde van het salaris en spaart dit in de nieuwe kolom avg_salary met behulp van mute() (Opmerking: gebruik muteren, niet samenvatten, om alle rijen te behouden), en filter tenslotte om alleen records bij te houden met een salaris dat strikt groter is dan avg_salary. Opslaan in res.
Toon hint
V.S. df %>% group_by(afdeling) %>% muteren(gem._salaris = gemiddelde(salaris)) %>% filter(salaris > gem_salaris)
Oplossing beschikbaar na 3 pogingen