数据帧中的拾取值对应于值而不在R中循环

时间:2017-11-02 18:48:18

标签: r loops

我有

FORCADA_ALEATORIOS <- c(0.77503776, 0.95981560, 0.43858290, 0.96340018,
                        0.40830180, 0.27587142, 0.09719325, 0.87138411, 0.18396708, 
                        0.36734687, 0.50293107, 0.05382047)

和数据框(BASE_DADOS)如下所示

MEDIANA     PERCENTUAL_ACUMULADO_ANTERIOR     PERCENTUAIS_ACUMULADOS
   17                  0.0000000                    0.9354839
  1308                 0.9354839                    0.9677419
  1656                 0.9677419                    1.0000000

我需要在MEDIANAFORCADA_ALEATORIOS之间选择PERCENTUAL_ACUMULADO_ANTERIOR列值,而无需循环播放,并且效率最高,因为我会这样做几次就像一百万。

在这种情况下的预期结果:

PERCENTUAIS_ACUMULADOS

下面是我构建的代码,但速度很慢。

(17,1308,17,1308,17,17,1656,17,17,17,17,17)

非常感谢你!

1 个答案:

答案 0 :(得分:0)

这有效:

do.call(rbind,lapply(FORCADA_ALEATORIOS, 
function(x) {
mdf[(mdf['PERCENTUAL_ACUMULADO_ANTERIOR'] <= x) & 
    (mdf['PERCENTUAIS_ACUMULADOS'] >= x)]}))[,1]

##  [1]   17 1308   17 1308   17   17   17   17   17   17   17   17

<强> 数据:

 mdf <- structure(list(MEDIANA = c(17L, 1308L, 1656L), PERCENTUAL_ACUMULADO_ANTERIOR = c(0, 
     0.9354839, 0.9677419), PERCENTUAIS_ACUMULADOS = c(0.9354839,                           
     0.9677419, 1)), .Names = c("MEDIANA", "PERCENTUAL_ACUMULADO_ANTERIOR",                 
     "PERCENTUAIS_ACUMULADOS"), row.names = c(NA, 3L), class = "data.frame")