计算每个子组的百分比

时间:2019-06-11 02:30:39

标签: r dplyr

这个问题以前已经回答过,但是解决方案不适用于我的特定情况。

stat

我基本上是在寻找这个东西

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

实际上,group_by似乎根本没有做任何事情。它没有给我“ n”或“ freq”列。不知道我在做什么错。是因为我正在处理因素吗?另外,如果不是很明显,则列中提供的值是假设的。

1 个答案:

答案 0 :(得分:1)

一个选项是在按“ 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  

数据

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
))