2017-08-02 119 views
0

如何計算dplyr中每個另一列的每組數據組的百分比?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) 

但商從取自

在蟒蛇/大熊貓

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 

回答

4

使用tableprop.table你覺得太複雜。嘗試

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 
2

我們可以在R

prop.table(table(df), 1)[,2] 
# a   b 
#0.6666667 0.0000000 
0

這是您看到數據如何流動的一種方式,但我喜歡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)