Muszę podzielić ramkę danych i obliczyć niektóre podsumowania na podstawie różnych kombinacji grup dwóch zmiennych kategorialnych: członkostwa i płci. Na przykład:
set.seed(123)
df <- data.frame( YEAR = c("1999", "1999", "1999", "1999", "2001", "2000","2000", "2000",
"1999","2000", "2000","1999", "2000", "2001", "2001", "2001", "2001"),
Sex=c("M", "M","M", "F", "M","M", "F","F", "F", "M", "F","F", "M", "M", "M", "F", "F"),
Membership = rep(c("YES", "NO"), each = 2),
Income = sample(1:10000, 17),
Taxes = sample(1:100, 17))
Dla każdego roku i każdej z czterech możliwych kombinacji grup (K, Tak), (M, NIE), (K, Tak), (K, NIE) Muszę się dowiedzieć, jaki jest stosunek całkowitego dochodu każdej grupy i wielki dochód wszystkich grup w tym roku. To samo dotyczy kolumny podatków.
Na przykład dla 1999 i (M, N) wynik powinien wynosić (986 + 4233) / 986 + 4233 + 9954 + 4776 + 8536) = 0,1832
Masz jakiś pomysł, jak to zdobyć? Dziękuję Ci
2 odpowiedzi
Zrobiłbym coś takiego ...
library(tidyverse)
df %>%
group_by(YEAR, Sex, Membership) %>%
summarize(GroupIncome = sum(Income), GroupTaxes = sum(Taxes)) %>%
group_by(YEAR) %>%
mutate(TotalIncomeForYear = sum(GroupIncome),
GroupPercentIncome = GroupIncome / TotalIncomeForYear,
TotalTaxesForYear = sum(GroupTaxes),
GroupPercentTaxes = GroupTaxes / TotalTaxesForYear) %>%
ungroup()
Co daje taką ramkę danych ...
Poniższy kod używa pakietu dplyr
do
- Oblicz sumy
YEAR
zIncome
iTaxes
, - oblicz sumy
Income
iTaxes
przez grupyYEAR
,Sex
,Membership
, - w tej samej instrukcji podziel te ostatnie sumy przez sumy obliczone wcześniej przez
YEAR
.
Rozgrupuj wynik.
library(dplyr)
df %>%
group_by(YEAR) %>%
mutate(SumYearIncome = sum(Income),
SumYearTaxes = sum(Taxes)) %>%
ungroup() %>%
group_by(YEAR, Sex, Membership) %>%
mutate(RatioGroupIncome = sum(Income)/SumYearIncome,
RatioGroupTaxes = sum(Taxes)/SumYearTaxes) %>%
ungroup() %>%
select(-SumYearIncome, -SumYearTaxes)
Podobne pytania
Nowe pytania
r
R to darmowy język programowania typu open source i środowisko oprogramowania do obliczeń statystycznych, bioinformatyki, wizualizacji i obliczeń ogólnych. Proszę podać minimalne i powtarzalne przykłady wraz z pożądanymi wynikami. Użyj dput () dla danych i określ wszystkie pakiety inne niż podstawowe za pomocą wywołań biblioteki (). Nie osadzaj obrazów dla danych lub kodu, zamiast tego użyj wciętych bloków kodu. W przypadku pytań związanych ze statystykami należy skorzystać z https://stats.stackexchange.com.