У меня есть набор данных, который выглядит следующим образом:
> df
teams people entries
1 A Team 6fd1 49
2 A Team 1df5 4
3 A Team 2hgt 19
4 A Team 8akt 4
5 A Team sdf9 19
6 B Team asc1 42
7 B Team abm8 32
8 B Team plo9 38
9 B Team 90la 5
10 B Team 8uil 23
> dput(df)
structure(list(teams = c("A Team", "A Team", "A Team", "A Team",
"A Team", "B Team", "B Team", "B Team", "B Team", "B Team"),
people = c("6fd1", "1df5", "2hgt", "8akt", "sdf9", "asc1",
"abm8", "plo9", "90la", "8uil"), entries = c(49, 4, 19, 4,
19, 42, 32, 38, 5, 23)), .Names = c("teams", "people", "entries"
), row.names = c(NA, -10L), class = "data.frame")
Я могу получить процент команд, у которых более 75%, выполнив это, хотя и грязно и, вероятно, не лучшим образом:
# sorted df and added cumulative percentage/sum and row number per team
> df
teams people entries cumulative_sum cumulative_perc number
1 A Team 6fd1 49 49 51.57895 1
3 A Team 2hgt 19 68 71.57895 2
5 A Team sdf9 19 87 91.57895 3
2 A Team 1df5 4 91 95.78947 4
4 A Team 8akt 4 95 100.00000 5
7 B Team abm8 89 89 45.17766 1
6 B Team asc1 42 131 66.49746 2
8 B Team plo9 38 169 85.78680 3
10 B Team 8uil 23 192 97.46193 4
9 B Team 90la 5 197 100.00000 5
# from this view, each team has 3/5 people (60%) reaching the minimum 75%
# entries, and using ddply, we can get that
ddply(df, 'teams', summarise,
marker = min(which(cumulative_perc > 75)),
total = NROW(teams),
seventyfive = marker/total)
teams marker total seventyfive
1 A Team 3 5 0.6
2 B Team 3 5 0.6
, и пока это работает, я хочу принять во внимание только процент записей третьего лица, которые на самом деле составляли 75% записей команд.Например, для команды A 75% их заявок составляют 72 (округлено), что означает, что мы рассматриваем только 4 из 19 заявок для третьего лица, что дает этой команде 2,21 / 5 вместо 3/5.