2
的累積和假設在R I有以下的數據幀dat
:計算等式
a <- c(6,6,6,7,9,10,11,13,16,17,19,20,22,10,23,25,32,32,34,35,6)
b <- c(1,1,0,1,0,1,0,1,1,0,0,0,1,0,1,0,0,0,0,0,1)
q <- c(3,2,4,2,4,2,2,3,0,5,0,6,1,0,3,4,9,1,2,0,12)
dat <- data.frame(a, b, q)
dat <- dat[order(dat$a),]
對於a
每個級別,我必須計算f = with(dat, sum(q[a==that level]*b[a==that level])/sum(b[a==that level]))
。例如,對於,f=(3*1+2*1+4*0+12*1)/(3+2+4+12)=17/21
。
所以我寫的代碼如下:
dat$qb <- dat$q * dat$b
v1 <- as.numeric(by(dat$qb, dat$a, FUN=sum))
dat$sqb <- rep(v1, table(dat$a))
v2<-as.numeric(by(dat$q, dat$a, FUN=sum))
dat$sumq <- rep(v2, table(dat$a))
dat$f <- dat$sqb/dat$sumq
現在我只需要列a
和f
:
dat <- unique(dat[,c(1,7)])
我的下一步是計算公式f = with(dat, sum(q[a==that level]*b[a==that level])/sum(b[a==that level]))
的累積和:
dat <- replace(dat, is.na(dat), 0)
dat$F <- cumsum(dat$f)
最終,我ne版的F
爲其a<=18
最大值:
Ft <- max(dat$F[dat$a<=18])
這是一個模擬的一部分,並且該部分的目標是找到的值。我認爲有更快的方法來編寫這些代碼塊。
- 任何更快的R代碼塊計算
Ft
將不勝感激。