I think the answers so far will give you the outer join rather than a left
join (which gives the same result for the example you gave).
If you do need a left join then you will need to constrain b to only the
items that also exist in a as well. Here is a solution for that case.
I've given a new b (b2) that shows the differences between join types.
joinLeft=: [ , ] #~ e.~&:({."1)
summary=: (~.@:({."1) ,. {."1 ]/. {:"1)
a=: _2]\'a';1;'b';2;'c';3
b=: _2]\'c';5;'a';4
b2=: _2]\'c';5;'a';4;'d';6;'e';7
a summary@joinLeft b2
┌─┬─┬─┐
│a│1│4│
├─┼─┼─┤
│b│2│ │
├─┼─┼─┤
│c│3│5│
└─┴─┴─┘
Here are solutions for the other join types:
joinRight=: ] , [ #~ e.&:({."1)
joinInner=: (, ([ #~ {."1@[ e. ]) ([ -. -.)&:({."1))
joinOuter=: ,
On Wed, Aug 13, 2014 at 10:54 AM, Raul Miller <[email protected]> wrote:
> That (using /.) is what I was going to say.
>
>
> S
>
> p
>
> o
>
> i
>
> l
>
> e
>
> r
>
>
>
> S
>
> p
>
> a
>
> c
>
> e
>
> .
>
> .
>
> .
>
> ({."1 ]/. {:"1) a,b
>
> Thanks,
>
> --
> Raul
>
> On Tue, Aug 12, 2014 at 6:36 PM, robert therriault
> <[email protected]> wrote:
> > Hi Joe,
> >
> > Henry touches on this in JforC: Apply On Subsets: Dyad u/.
> >
> >
> http://www.jsoftware.com/help/jforc/loopless_code_v_partitions.htm#_Toc191734451
> >
> > He does a total instead of an append, but I think you'll get the idea.
> >
> > Cheers, bob
> >
> > On Aug 12, 2014, at 3:19 PM, Joe Bogner <[email protected]> wrote:
> >
> >> I've been fiddling with this for 30 minutes and I can't figure it
> >> out... Maybe it's too late in the day
> >>
> >> a=:_2]\'a';1;'b';2;'c';3
> >> b=:_2]\'c';5;'a';4
> >>
> >> what verb will produce this?
> >>
> >> ]a,.(4;'';5)
> >> ┌─┬─┬─┐
> >> │a│1│4│
> >> ├─┼─┼─┤
> >> │b│2│ │
> >> ├─┼─┼─┤
> >> │c│3│5│
> >> └─┴─┴─┘
> >>
> >>
> >> I went down this path:
> >>
> >> ] ((0{"1 b)i.(0{"1 a))
> >> 1 2 0
> >>
> >> I figured I could use { and return '' if the index was greater than
> >> the length (e.g., 2 should be '')
> >>
> >> I tried using :: to return '' on index error but I couldn't get that to
> work
> >>
> >> NB. not what I wanted
> >> ] ((0{"1 b)i.(0{"1 a)) ({ :: ('no'"_)) b
> >> no
> >>
> >> Then I tried using ^: to return '' if the length was greater than # b
> >>
> >> Then I tried writing a explicit verb using if.
> >>
> >> Then I threw in the towel and decided to ask for help since this must
> >> be a common need
> >>
> >> I'm sure I've solved this before but cannot remember how
> >> ----------------------------------------------------------------------
> >> For information about J forums see http://www.jsoftware.com/forums.htm
> >
> > ----------------------------------------------------------------------
> > For information about J forums see http://www.jsoftware.com/forums.htm
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
>
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm