2012-11-08 97 views
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_LENGTHCDUID,然後計算百分比SUM_LENGTHSENSI_FINAL=5是總結SUM_LENGTHCDUID

所以在簡單的話,我想這樣做:

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

CDUID = 5915,然後在接下來的5917等。

我做了什麼至今是我計算的基礎上,CDUID總和:

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

但現在我卡住了... :-(

+0

+ 1例如數據和你曾經嘗試過的。 – mnel

回答

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

+0

完美!太棒了,我從來沒有聽說過那個包data.table。我將確保閱讀該軟件包的說明,聽起來像對我的分析有用。 – user1807857

相關問題