2017-10-28 61 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())