R - 使用多列的条件cumsum

时间:2016-03-03 15:05:40

标签: r

我是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处理。任何关于如何进行的建议将不胜感激

0 个答案:

没有答案