每组 dplyr 百分比

dplyr percentage per group

如何计算 dplyr 中每组另一列的数据帧百分比?

df 包含以下记录

 A  target
   a    1
   b    0
   a    0
   a    1

这就完成了第一部分

df %>%
  group_by(A) %>%
  summarise (n = n())

这是第二个

df %>%
  group_by(A, target) %>%
  summarise (n = n(), target_sum = sum(target))%>%
  filter(target == 1) %>%
  mutate(freq = n / target_sum)

但商是从

在python/pandas

grouped = df_original.groupby(['A', 'target']).size()
df = (grouped / grouped.groupby(level=0).sum())
grouped = df.reset_index(name='percentageA')
groupedOnly = grouped[grouped.target == 1]

将实现所需的计算,结果为:

a   1   0.666667

我们可以在 R

中使用 tableprop.table
prop.table(table(df), 1)[,2]
#    a         b 
#0.6666667 0.0000000 

你想的太复杂了。尝试

df %>%
  group_by(A) %>%
  summarise (mean(target))

# A tibble: 2 x 2
#       A `mean(target)`
#       <fctr>          <dbl>
#    1      a      0.6666667
#    2      b      0.0000000

这是您查看数据流动方式的一种方式,但我喜欢 Alex 的效率解决方案。

df <- tribble(
  ~A , ~target,
  "a" ,   1,
  "b" ,   0,
  "a" ,   0,
  "a" ,   1
 )


df %>%
   group_by(A) %>%
   mutate(n = n()) %>%
   group_by(A,target,n) %>%
   mutate(n_target = n()) %>%
   mutate(freq = n_target / n) %>%
   filter(target==1) %>%
   ungroup() %>%
   distinct(A,target,freq)