2015-09-28 90 views
0

我要讓包含符合我的標準^ =行數向量的行數向量:請與符合標準的

leftE0 <- c(900,2000,4000,9000,15000,30000,53000,100000,160000) 
rightE0 <- c(2000,4000,9000,15000,30000,53000,100000,160000,300000) 

sum(datap$CF > 0 & (datap$E0.keV > leftE0[1]) & (datap$E0.keV < rightE0[1]), na.rm=TRUE) 

我不知道如何vectorise這個動作。

回答

2

使用cuttable

#some example data 
set.seed(42) 
datap <- data.frame(CF = rnorm(100), E0.keV = exp(runif(100, 0, log(4e6)))) 

breaks <- c(-Inf, 900,2000,4000,9000,15000,30000,53000,100000,160000, 300000, Inf) 

table(cut(datap$E0.keV, breaks), datap$CF > 0) 
#     FALSE TRUE 
# (-Inf,900]   21 32 
# (900,2e+03]   6 3 
# (2e+03,4e+03]  3 3 
# (4e+03,9e+03]  6 0 
# (9e+03,1.5e+04]  1 1 
# (1.5e+04,3e+04]  0 1 
# (3e+04,5.3e+04]  1 0 
# (5.3e+04,1e+05]  2 0 
# (1e+05,1.6e+05]  1 0 
# (1.6e+05,3e+05]  2 1 
# (3e+05, Inf]  3 13 
+0

非常感謝您!這不是我需要的! – user2377592