Вычислительный процент каждой подгруппы - PullRequest
1 голос
/ 11 июня 2019

На этот вопрос уже был дан ответ, но решения не работают для моей конкретной ситуации.

col1   |   col2
 A     |    0
 B     |    1
 A     |    0
 A     |    1
 B     |    0

Я в основном ищу это:

col1   |   col2   |   Percentage
 A     |    0     |      0.67
 A     |    1     |      0.33
 B     |    0     |      0.50
 B     |    1     |      0.50

Оба столбца являются факторами. Следующие решения - это то, что я продолжаю находить в других темах:

df %>% group_by(col1, col2) %>% summarise(n=n()) %>% mutate(freq = n / sum(n))
or something along those lines.

На самом деле group_by, похоже, вообще ничего не делает. Это не дает мне столбец 'n' или 'freq'. Не знаю, что я делаю не так. Это потому, что я работаю с факторами? Кроме того, если это не очевидно, значения, указанные в столбцах, являются гипотетическими.

1 Ответ

1 голос
/ 11 июня 2019

Можно было бы получить подсчет частоты после группировки по 'col1', а затем с помощью 'col2' также в качестве столбца группировки, разделить эту частоту на уже созданную частоту

library(dplyr)
df %>% 
   group_by(col1) %>%
   mutate(n = n()) %>%
   group_by(col2, add = TRUE) %>% 
   summarise(freq = n()/n[1])
# A tibble: 4 x 3
# Groups:   col1 [2]
#  col1   col2  freq
#  <chr> <int> <dbl>
#1 A         0 0.667
#2 A         1 0.333
#3 B         0 0.5  
#4 B         1 0.5  

data

df <- structure(list(col1 = c("A", "B", "A", "A", "B"), col2 = c(0L, 
1L, 0L, 1L, 0L)), class = "data.frame", row.names = c(NA, -5L
))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...