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

ここで、perを合計してから、合計されたSUM_LENGTHperのパーセンテージCDUIDを計算しますSUM_LENGTHSENSI_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.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

于 2012-11-08T01:43:28.170 に答える