3

我正在尝试在 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_LENGTHper求和CDUID,然后计算每总和SUM_LENGTH的百分比SENSI_FINAL=5SUM_LENGTHCDUID

所以简单地说,我想这样做:

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

CDUID = 5915,然后为下一个 5917 等。

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

CDlenght <- aggregate(step1$SUM_LENGTH~step1$CDUID, data=step1, sum)

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

4

1 回答 1

2

我会使用data.tableorddply为此

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

于 2012-11-08T01:43:28.170 回答