我想在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_LENGTH
与SENSI_FINAL=5
的总和SUM_LENGTH
每{{}}的百分比1}}
所以用简单的话说我想这样做:
(145123 /(19178 + 21536 + 35640 + 170549))* 100
代表CDUID
,然后代表下一代5917等。
到目前为止我做的是根据CDUID计算总和:
CDUID = 5915
但现在我被困了......: - (
答案 0 :(得分:2)
我会将data.table
或ddply
用于此
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