[Jprogramming] replacing missing values with closest neighbor

Raul Miller rauldmiller at gmail.com
Thu Sep 29 20:58:52 HKT 2011


On Thu, Sep 29, 2011 at 6:18 AM, Raul Miller <rauldmiller at gmail.com> wrote:
> On Wed, Sep 28, 2011 at 10:44 PM, Lettow, Kenneth <KLettow at thomasnet.com> wrote:
>>   sa=: 1 2 5 9
> ...
>>   NB. nearest value in sa.  The desired result should be:
>>   desiredresult=: 1 1 2 2 5 5 5 5 9 9
>
> Here's a brute force approach:
>
>   ({."1 {~ |: i."_1 <./)@:|@(-/ 1 i. at + >./) 1 2 5 9
> 1 1 2 2 5 5 5 5 9 9


Here's a version that relies on the data being ordered:

inds=: [: i. 1 + {:
poss=: (,{.) {~ _1 0 +/ ] I. inds
nearVal=: |:@poss {~"_1 [: (|: i."_1 <./) inds |@-"1 poss

   nearVal 1 2 5 9
1 1 2 2 5 5 5 5 9 9

Or, an explicit version (which, in effect, caches the function results
within an execution):

nearVal=:3 :0
  inds=. i. 1 + {: y
  poss=. (y,{.y) {~ 0 _1 +/ y I. inds
  (|:poss) {~"_1 (|: i."_1 <./) |inds -"1 poss
)

-- 
Raul


More information about the Programming mailing list