根据一个数据帧中其他值的总和计算一个值

时间:2012-11-08 01:34:40

标签: r dataframe

我想在R中解决这个问题,虽然我知道我现在已经在Excel中完成了这个,但我真的想学习如何使用R。

我的数据框如下所示:

 OBJECTID CDUID SENSI_FINA FREQUENCY SUM_LENGTH

        6  5915          1        51      19178

        7  5915          2        97      21536

        8  5915          3       201      35640

        9  5915          4       551     170549

       10  5915          5       308     145126

       11  5917          1       210      28104

       12  5917          2      1897     249379

现在我想对每SUM_LENGTH CDUID求和,然后计算SUM_LENGTHSENSI_FINAL=5的总和SUM_LENGTH每{{}}的百分比1}}

所以用简单的话说我想这样做:

  

(145123 /(19178 + 21536 + 35640 + 170549))* 100

代表CDUID,然后代表下一代5917等。

到目前为止我做的是根据CDUID计算总和:

CDUID =  5915

但现在我被困了......: - (

1 个答案:

答案 0 :(得分:2)

我会将data.tableddply用于此

library(plyr)

DT2 <- ddply(step1, .(CDUID), mutate, percent = 100* SUM_LENGTH / sum(SUM_LENGTH))

 subset(DT2, SENSI_FINA == 5)
##   OBJECTID CDUID SENSI_FINA FREQUENCY SUM_LENGTH percent
## 5       10  5915          5       308     145126 37.0192

我认为data.table语法更优雅,内存效率更高

library(data.table)
DT <- data.table(step1)

DT[,percent :=  100* SUM_LENGTH / sum(SUM_LENGTH), by = CDUID][SENSI_FINA == 5]

:=DT内通过引用分配(因此percent列现在位于DT