Dplyr: hoe een variabele te muteren als de kolom een string bevat
U kunt de volgende basissyntaxis in dplyr gebruiken om een variabele te muteren als een kolom een bepaalde tekenreeks bevat:
library (dplyr) df %>% mutate_at(vars(contains(' starter ')), ~ (scale(.) %>% as. vector ))
Deze specifieke syntaxis past de functie scale() toe op elke variabele in het dataframe die de tekenreeks „starter“ in de kolomnaam bevat.
Het volgende voorbeeld laat zien hoe u deze syntaxis in de praktijk kunt gebruiken.
Voorbeeld: muteer de variabele als de kolom een string bevat
Stel dat we het volgende dataframe in R hebben:
#create data frame df <- data. frame (team=c('A', 'B', 'C', 'D', 'E', 'F'), starter_points=c(22, 26, 25, 13, 15, 22), starter_assists=c(4, 5, 10, 14, 12, 10), bench_points=c(7, 7, 9, 14, 13, 10), bench_assists=c(2, 5, 5, 4, 9, 14)) #view data frame df team starter_points starter_assists bench_points bench_assists 1 to 22 4 7 2 2 B 26 5 7 5 3 C 25 10 9 5 4 D 13 14 14 4 5 E 15 12 13 9 6 F 22 10 10 14
We kunnen de volgende syntaxis gebruiken om de functie scale() toe te passen op elke variabele in het dataframe die de tekenreeks „starter“ in de kolomnaam bevat.
library (dplyr) #apply scale() function to each variable that contains 'starter' in the name df %>% mutate_at(vars(contains(' starter ')), ~ (scale(.) %>% as. vector )) team starter_points starter_assists bench_points bench_assists 1 A 0.2819668 -1.3180158 7 2 2 B 1.0338784 -1.0629159 7 5 3 C 0.8459005 0.2125832 9 5 4 D -1.4098342 1.2329825 14 4 5 E -1.0338784 0.7227828 13 9 6 F 0.2819668 0.2125832 10 14
Met behulp van deze syntaxis konden we de functie scale() toepassen om elke kolom met „starter“ zo te schalen dat hun waarden nu een gemiddelde van 0 en een standaarddeviatie van 1 hebben.
Houd er rekening mee dat de volgende kolommen zijn gewijzigd:
- starter_punten
- starter_assisten
Alle overige kolommen bleven ongewijzigd.
Merk ook op dat we elke gewenste functie kunnen toepassen met behulp van deze syntaxis.
In het vorige voorbeeld hebben we ervoor gekozen om elke kolom te schalen met de tekenreeks ’starter‘ in de naam.
We zouden echter iets eenvoudiger kunnen doen, zoals de waarden met twee vermenigvuldigen voor elke kolom met ’starter‘ in de naam:
library (dplyr) #multiply values by two for each variable that contains 'starter' in the name df %>% mutate_at(vars(contains(' starter ')), ~ (. * 2 )) team starter_points starter_assists bench_points bench_assists 1 A 44 8 7 2 2 B 52 10 7 5 3 C 50 20 9 5 4 D 26 28 14 4 5 E 30 24 13 9 6 F 44 20 10 14
Merk op dat de waarden van de kolommen starter_points en starter_assisties met twee zijn vermenigvuldigd, terwijl alle andere kolommen ongewijzigd zijn gebleven.
Aanvullende bronnen
In de volgende tutorials wordt uitgelegd hoe u andere veelvoorkomende taken in dplyr uitvoert:
Rijen verwijderen met dplyr
Kolommen selecteren op index met behulp van dplyr
Hoe u rijen kunt filteren die een bepaalde tekenreeks bevatten met behulp van dplyr