Расчет сгруппированных процентов - PullRequest
0 голосов
/ 04 декабря 2018

Для примера кадра данных:

df <- structure(list(name = c("a", "b", "c", "d", "e", "f", "g", "h", 
    "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", 
    "v", "w", "x", "y", "z", "a", "b", "c", "d", "e", "f", "g", "h", 
    "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", 
    "v", "w", "x", "y", "z", "a", "b", "c", "d", "e", "f", "g", "h", 
    "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", 
    "v", "w", "x", "y", "z"), amount = c(11L, 9L, 5L, 13L, 15L, 16L, 
    2L, 5L, 6L, 8L, 9L, 15L, 16L, 17L, 13L, 11L, 10L, 9L, 8L, 7L, 
    6L, 8L, 15L, 16L, 15L, 9L, 8L, 7L, 6L, 5L, 18L, 16L, 1L, 14L, 
    15L, 13L, 12L, 11L, 10L, 9L, 8L, 5L, 6L, 9L, 10L, 12L, 13L, 6L, 
    8L, 15L, 16L, 15L, 9L, 8L, 7L, 6L, 5L, 18L, 16L, 1L, 14L, 15L, 
    13L, 12L, 11L, 10L, 9L, 13L, 15L, 16L, 17L, 18L, 19L, 20L, 22L, 
    17L, 16L, 8L), decile = c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 
    10L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 1L, 2L, 3L, 4L, 
    5L, 6L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 1L, 2L, 3L, 
    4L, 5L, 6L, 7L, 8L, 9L, 10L, 1L, 2L, 3L, 4L, 5L, 6L, 1L, 2L, 
    3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 
    8L, 9L, 10L, 1L, 2L, 3L, 4L, 5L, 6L), time = c(2016L, 2016L, 
    2016L, 2016L, 2016L, 2016L, 2016L, 2016L, 2016L, 2016L, 2016L, 
    2016L, 2016L, 2016L, 2016L, 2016L, 2016L, 2016L, 2016L, 2016L, 
    2017L, 2017L, 2017L, 2017L, 2017L, 2017L, 2017L, 2017L, 2017L, 
    2017L, 2017L, 2017L, 2017L, 2017L, 2017L, 2017L, 2017L, 2017L, 
    2017L, 2017L, 2017L, 2017L, 2017L, 2017L, 2017L, 2017L, 2017L, 
    2017L, 2017L, 2017L, 2017L, 2017L, 2018L, 2018L, 2018L, 2018L, 
    2018L, 2018L, 2018L, 2018L, 2018L, 2018L, 2018L, 2018L, 2018L, 
    2018L, 2018L, 2018L, 2018L, 2018L, 2018L, 2018L, 2018L, 2018L, 
    2018L, 2018L, 2018L, 2018L)), .Names = c("name", "amount", "decile", 
    "time"), row.names = c(NA, -78L), class = c("tbl_df", "tbl", 
    "data.frame"), spec = structure(list(cols = structure(list(name = structure(list(), class = c("collector_character", 
    "collector")), amount = structure(list(), class = c("collector_integer", 
    "collector")), decile = structure(list(), class = c("collector_integer", 
    "collector")), time = structure(list(), class = c("collector_integer", 
    "collector"))), .Names = c("name", "amount", "decile", "time"
    )), default = structure(list(), class = c("collector_guess", 
    "collector"))), .Names = c("cols", "default"), class = "col_spec"))

Я хочу создать дополнительный кадр данных, который детализирует количество строк в каждом «дециле».Я также хочу вычислить долю «сумм», которые равны 10 или более (как% от общего числа строк в каждом дециле).

Я хочу использовать решение dplyr, так как изо всех сил пытается заставить работать другие пакетына моих реальных данных.

1 Ответ

0 голосов
/ 04 декабря 2018

Используя dplyr, мы можем group_by decile и посчитать количество строк в каждой группе на n() и вычислить соотношение строк, где amount больше 10, взяв сумму этих строки разделив его на общее количество строк.

library(dplyr)

df %>%
  group_by(decile) %>%
  summarise(count_rows = n(), 
           prop = sum(amount > 10)/count_rows)


#  decile count_rows  prop
#    <int>      <int> <dbl>
# 1      1          9 0.556
# 2      2          9 0.444
# 3      3          9 0.444
# 4      4          9 0.556
# 5      5          9 0.667
# 6      6          9 0.667
# 7      7          6 0.333
# 8      8          6 0.333
# 9      9          6 0.500
#10     10          6 0.667
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...