Найти следующие меньшие и следующие большие значения - PullRequest
0 голосов
/ 23 марта 2020

У меня есть два вектора:

smaller_array <- c(50, 60, 70, 75, 80, 85, 90, 95, 100, 105)

moneyness_cert <- c(105.8138,   105.7155,   105.4637,   104.5942,   105.0757,   105.316,    104.641,     
                    105.0637,   105.461,    104.971,    105.2471,   105.1348,   105.638,    105.8024,                                                               
                    105.592,    104.9338,   105.0133,   104.613,    104.9407,   105.0136,   107.2144,    
                    107.0112,   105.7793,   106.4742,   105.5703,   106.0615,   106.3446,   105.7296,    
                    105.1307,   104.6472,   103.6721,   104.607,    105.1265,   105.2077,   104.363,     
                    104.5036,   104.2205,   104.9135,   103.8404,   105.1506,   105.8887,   105.0894,    
                    104.3529,   103.0007,   103.0904,   103.334,    103.2959,   103.4819,   103.504,     
                    102.7641,   102.5911,   102.5386,   102.843,    103.8211,   102.3814,   105.265,     
                    104.3255,   104.1589,   105.6462,   107.0716,   106.5527,   104.655,    103.1285,    
                    102.3955,   102.8577) #length of vector is 65

Я хочу найти для каждого значения moneyness_cert значение, которое ближе всего к нему в lower_array. Найденные значения должны быть сохранены в векторе (например, "result_vector")

Пример для 64-го элемента в moneyness_cert:
moneyness_cert = 102.3955

, а затем вернуть в lower_array значение "100 "
и сохранить его в result_vector в месте 64

Я пытался (который дал бесполезные результаты); match.closest-function из MALDIquant-Package:

>     match.closest(x = moneyness_cert, table = sort(smaller_array, decreasing = F), tolerance = Inf, nomatch = NA)
 [1] 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
[26] 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
[51] 10 10 10 10  9 10 10 10 10 10 10 10 10  9 10

Еще одна попытка была:

> apply(smaller_array, 1 , function(x) moneyness_cert - x)
Error in apply(smaller_array, 1, function(x) moneyness_cert - x) : 
  dim(X) must have a positive length

Через lapply он тоже не работал.

Может кто-нибудь помочь меня?

Большое спасибо!

Ответы [ 2 ]

0 голосов
/ 23 марта 2020

с использованием того же purrr

library(purrr)
map_dbl(moneyness_cert, ~ smaller_array[which.min(abs(smaller_array - .x))])
0 голосов
/ 23 марта 2020

Попробуйте:

sapply(moneyness_cert, function(x) smaller_array[which.min(abs(smaller_array - x))])

Вывод:

[1] 105 105 105 105 105 105 105 105 105 105 105 105 105 105 105 105 105 105 105 105 105 105 105 105 105 105 105 105 105 105 105 105 105
[34] 105 105 105 105 105 105 105 105 105 105 105 105 105 105 105 105 105 105 105 105 105 100 105 105 105 105 105 105 105 105 100 105

Или непосредственно для 64-го элемента:

sapply(moneyness_cert, function(x) smaller_array[which.min(abs(smaller_array - x))])[64]

# [1] 100
...