2017-10-28 64 views
0

我想在使用group_by後使用dplyr來計算行數。我有以下數據:在Dplyr中按組計算行數:評估錯誤

scenario pertubation population  
    A   1    20 
    B   1    30 
    C   1    40 
    D   1    50 
    A   2    15 
    B   2    25 

而且我用下面的代碼GROUP_BY併發生變異:

test <- all_scenarios %>% 
     group_by(scenario) %>% 
     mutate(rank = dense_rank(desc(population)), 
       exceedance_probability = rank/count(pertubation)) %>% 
     select(scenario, pertubation, All.ages, rank, exceedance_probability) 

,但我一直encoutering此錯誤信息,而且我不確定的是什麼意思,或爲什麼我繼續得到它?

Error in mutate_impl(.data, dots) : 
Evaluation error: no applicable method for 'groups' applied to an object of class "c('integer', 'numeric')". 

我想我的輸出數據看起來是這樣的:

scenario pertubation population rank exceedance_probability 
    A   1    20  12   0.06 
    B   1    30  7   0.035 
    C   1    40  2   0.01 
    D   1    50  1   0.005 
    A   2    15  34   0.17 
    B   2    25  28   0.14 

要計算超越概率我只需要通過觀測的數量來劃分等級,但我發現它在group_by語句後,很難在dplyr中執行此操作。我是否錯誤地訂購了dplyr語句?

+0

'計數'應該用在data.frame上。你的例子和輸出似乎是不同的。也許使用'all_scenarios%>%group_by(場景)%>%mutate(rank = dense_rank(desc(population)),exceedance_probability = rank/table(pertubation))' – akrun

回答

0

我們可以分別得到count,並與原始數據集加入

all_scenarios %>% 
     count(pertubation) %>% 
     left_join(all_scenarios, ., by = 'pertubation') %>% 
     group_by(scenario) %>% 
     mutate(rank = dense_rank(desc(population)), exceedance_probability = rank /n) 

而不是使用count或者,我們可以做第二個group_by並獲得n()

all_scenarios %>% 
    group_by(scenario) %>% 
    mutate(rank = dense_rank(desc(population))) %>% 
    group_by(pertubation) %>% 
    mutate(exceedance_probability = rank /n())