我正在尝试使用group_by后使用dplyr计算行数。我有以下数据:
scenario pertubation population
A 1 20
B 1 30
C 1 40
D 1 50
A 2 15
B 2 25
我正在使用以下代码进行group_by和mutate:
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)
但是我一直在纠结这个错误信息,我不确定它的含义,或者为什么我一直这样做?
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 :(得分:1)
我们可以单独获取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())
答案 1 :(得分:1)
您的问题来自
count(pertubation)
部分代码。您不能在group_by方案中使用count。我找不到一个很好的解释,但它不起作用。只需使用
n()
在代码中用代替它。由于您按场景分组,并且每个场景插值在数据集中都是唯一的,因此通过计算每个场景中的行数,可以有效地计算每个场景的值或插值数量。