我是stackoverflow的新手所以我希望我以正确的格式发布我的问题。我有一个包含三列的测试数据集,其中rank是单元格的排名,Esvalue是单元格的值,zoneID是区域标识符(注意!在真实数据集中我有多达40.000 zoneIDs)
rank<-seq(0.1,1,0.1)
Esvalue<-seq(10,1)
zoneID<-rep(seq.int(1,2),times=5)
rank Esvalue zoneID
0.1 10 1
0.2 9 2
0.3 8 1
0.4 7 2
0.5 6 1
0.6 5 2
0.7 4 1
0.8 3 2
0.9 2 1
1.0 1 2
我想计算以下内容: %ES值&lt; - 对于每个等级,包括所有较低等级,总ES值相对于所有区域的ES值的累积%份额
cumsum(df$Esvalue)/sum(df$Esvalue)
%ES值区域&lt; - 对于每个等级,包括所有较低等级,总Esvalue相对于每个区域的zoneID的ES值的累积%份额。我现在尝试使用mutate并使用dplyr。到目前为止,两者都只给我累计金额,而不是份额。最后,这将为每个zoneID生成一个变量
df %>%
mutate(cA=cumsum(ifelse(!is.na(zoneID) & zoneID==1,Esvalue,0))) %>%
mutate(cB=cumsum(ifelse(!is.na(zoneID) & zoneID==2,Esvalue,0)))
我想要结合这两个变量 1)计算所有zoneID的两者之间的abs差值 2)对于每个等级计算所有zoneID的绝对差异的平均值
最后输出应该如下:
rank Esvalue zoneID mean_abs_diff
0.1 10 1 0.16666667
0.2 9 2 0.01333333
0.3 8 1 0.12000000
0.4 7 2 0.02000000
0.5 6 1 0.08000000
0.6 5 2 0.02000000
0.7 4 1 0.04666667
0.8 3 2 0.01333333
0.9 2 1 0.02000000
1.0 1 2 0.00000000
现在我使用Excel中的一些中间步骤创建了最后一个,但我的最终数据集太大而无法由Excel处理。任何关于如何进行的建议将不胜感激