我正在尝试在 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
每CDUID
简单来说,我想这样做:
(145123/(19178+21536+35640+170549))*100
CDUID = 5915
然后是下一个 5917 等等。
到目前为止我所做的是根据 CDUID 计算总和:
CDlenght <- aggregate(step1$SUM_LENGTH~step1$CDUID, data=step1, sum)
但现在我卡住了...:-(
最佳答案
我会为此使用 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
关于r - 根据一个数据框中其他值的总和计算一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13281177/