Получите относительную численность каждой группы dplyr - PullRequest
1 голос
/ 20 июня 2020

У меня есть следующая таблица:

 dd <- structure(list(group_members = structure(c(6L, 6L, 1L, 1L, 2L, 2L, 3L, 3L, 4L, 4L, 5L, 5L),
 .Label = c("1", "2", "3", "4", "5", ">6"), class = "factor"), Test_A = c("negative", "positive",
 "negatiu", "positive", "negatiu", "positive", "negatiu", "positive", "negatiu", "positive", "negatiu", "positive"), cases = c(58L, 2L, 14781L, 3525L, 7867L, 415L, 4113L, 72L, 2054L, 10L, 347L, 2L)), row.names = c(NA, -12L), groups = structure(list(group_members = structure(1:6, .Label = c("1", "2", "3", "4", "5", ">6"), class = "factor"), .rows = structure(list( 3:4, 5:6, 7:8, 9:10, 11:12, 1:2), ptype = integer(0), class = c("vctrs_list_of", "vctrs_vctr", "list"))), row.names = c(NA, 6L), class = c("tbl_df", "tbl", "data.frame"), .drop = TRUE), class = c("grouped_df", "tbl_df", "tbl", "data.frame"))

Вот таблица

> dd
# A tibble: 12 x 3
# Groups:   group_members [6]
   group_members Test_A   cases
   <fct>         <chr>    <int>
 1 >6            negative    58
 2 >6            positive     2
 3 1             negatiu  14781
 4 1             positive  3525
 5 2             negatiu   7867
 6 2             positive   415
 7 3             negatiu   4113
 8 3             positive    72
 9 4             negatiu   2054
10 4             positive    10
11 5             negatiu    347
12 5             positive     2

Я хотел бы получить относительную численность каждой группы. Например, для "group_members> 6" у меня 58 отрицательных случаев и 2 положительных случая. Я хотел бы получить новый столбец следующим образом:

Например, для группы 6: «Частота = 58/60 = 0,96 и« Частота = 2/60 = 0,04 »»

> dd
    # A tibble: 12 x 3
    # Groups:   group_members [6]
       group_members Test_A   cases  frequency
       <fct>         <chr>    <int>
     1 >6            negative    58  0.96
     2 >6            positive     2   0.004
.....

Спасибо за помощь.

1 Ответ

0 голосов
/ 20 июня 2020
dd %>%
  group_by(group_members) %>%
  mutate(frequency = cases / sum(cases))

дает:

# A tibble: 12 x 4
# Groups:   group_members [6]
   group_members Test_A   cases frequency
   <fct>         <chr>    <int>     <dbl>
 1 >6            negative    58   0.967  
 2 >6            positive     2   0.0333 
 3 1             negatiu  14781   0.807  
 4 1             positive  3525   0.193  
 5 2             negatiu   7867   0.950  
 6 2             positive   415   0.0501 
 7 3             negatiu   4113   0.983  
 8 3             positive    72   0.0172 
 9 4             negatiu   2054   0.995  
10 4             positive    10   0.00484
11 5             negatiu    347   0.994  
12 5             positive     2   0.00573
...