Хорошо, так что, если я вас правильно понял, вы хотите узнать какое-то эмпирическое кумулятивное распределение. Вы должны посмотреть, как использовать приложение, это сделает вашу жизнь намного проще.
Приведенный ниже код требует некоторого времени для изучения, но тогда ваш поиск должен быть относительно быстрым. Таким образом, если вы хотите, чтобы процент значений, которые LESS или EQUAL запрашивали для определенного столбца, вы просто передаете вектор значений, а затем возвращаете вектор процентов. Если вы хотите подготовить, есть пример ниже.
Надеюсь, это поможет.
library(dplyr) ## just for %>%
test <- data.frame(x1=rpois(100,n = 10**7),x2=rpois(100,n = 10**7),
x3=rpois(100,n = 10**7),x4=rpois(100,n = 10**7),
x5=rpois(100,n = 10**7),x6=rpois(100,n = 10**7),
x7=rpois(100,n = 10**7),x8=rpois(100,n = 10**7),
x9=rpois(100,n = 10**7),x10=rpois(100,n = 10**7)
)
system.time({
get_function <- apply(test,2,ecdf)
## learning fucntion 10 million instances, 10 rows
##user system elapsed
##4.38 0.73 5.16
})
evaluate <- function(query,funct=get_function){
lapply(1:length(get_function),function(i){
funct[[i]](query[i])
}) %>% unlist()
}
query_1 <- rep(-10,10) ## never appear, percentage should be 0
query_2 <- rep(100,10) ## around 0.5
query_3 <- rep(10000,10) ## 1 or close to 1
evaluate(query_1)
# [1] 0 0 0 0 0 0 0 0 0 0
evaluate(query_2)
# [1] 0.526348 0.526626 0.526714 0.526150 0.527456 0.526217 0.525491 0.526729 0.526429 0.525340
evaluate(query_3)
# [1] 1 1 1 1 1 1 1 1 1 1
## get percentage of values between 95 and 100
query_4 <- rep(95,10)
evaluate(query_2) - evaluate(query_4)
#[1] 0.1954705 0.1952166 0.1952291 0.1954930 0.1955171 0.1954126 0.1952673 0.1953782 0.1952068 0.1953201