【问题标题】:Calculate the ratio of occurence within a group in a dataframe [duplicate]计算数据框中组内出现的比率[重复]
【发布时间】:2020-11-26 13:06:02
【问题描述】:

我正在尝试计算每个组内nsum(n) 之间的比率。我知道我离解决方案不远了。

数据:

df_rld %>% 
   select(type, run_length) %>% 
   mutate(run_length = as.numeric(run_length)) %>% 
   group_by(type, run_length) %>% 
   count(run_length)
type  | run_length | n 
---------------------------
A     |      15    | 1
B     |      24    | 3
B     |      26    | 7
C     |      27    | 10
C     |      28    | 2

我想要什么:

type  | run_length | n     | ratio
-----------------------------------------
A     |      15    | 1     | 1 / 1 = 1
B     |      24    | 3     | 3 / (3+7) = 0.3
B     |      26    | 7     | 7 / (3+7) = 0.7
C     |      27    | 10    | 10 / (10+2) = 0.83
C     |      28    | 2     | 2 / (10+2) = 0.17

比率分母是n按组的总和,但我不知道如何计算。使用 group_by 我可以设法得到所有 n 的总和,因此由于某种原因,比率等于 1。为简单起见,我想在不加入表格的情况下这样做。

【问题讨论】:

    标签: r dplyr group-by aggregate


    【解决方案1】:

    你应该只按type 分组,这样n/sum(n) 会给你正确的计算。如果您同时按typerun_length 分组,那么您将始终得到1 的比率(除非有两个条目具有相同的type 和相同的run_length 值,在这种情况下您将得到0.5 in那些行)。

    df_rld %>% 
       select(type, run_length) %>% 
       mutate(run_length = as.numeric(run_length)) %>% 
       group_by(type, run_length) %>% 
       count(run_length) %>%
       group_by(type) %>% 
       mutate(ratio = n/sum(n))
    
    #> # A tibble: 5 x 4
    #> # Groups:   type [3]
    #>   type  run_length     n ratio
    #>   <fct>      <int> <int> <dbl>
    #> 1 A             15     1 1    
    #> 2 B             24     3 0.3  
    #> 3 B             26     7 0.7  
    #> 4 C             27    10 0.833
    #> 5 C             28     2 0.167
    

    【讨论】:

    • 谢谢!如此简单,我是如此接近。有时你只需要外部视角!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-28
    相关资源
    最近更新 更多