Because the data is boxed, all comparisons must be boxed.
header =. {. data
data =. }. data
index =. header i. <'nameFirst'
(<'Joe') +/@:= index {"1 data NB. 398
On Mon, Oct 7, 2013 at 10:25 AM, Marshall Lochbaum <[email protected]>wrote:
> You've got the arguments to i. backwards--the list to be searched is the
> left argument and the element to find is on the right. Assuming that hdr
> contains boxes, you also want the element to search for to be boxed.
> Then you would have
>
> hdr i. <'NameGiven'
>
> to find the name column.
>
> Another note is that for selecting column n from a table, (n {"1 t),
> which selects the nth element from each row of the table, is more
> idiomatic and generally easier to use than your ((<a:; n) { t).
>
> Marshall
>
> On Mon, Oct 07, 2013 at 12:59:13PM -0700, Dan Farmer wrote:
> > Hello all,
> >
> > As I have been trying to improve my J skills I've been trying to
> > incorporate it into my daily work, but I keep hitting a wall with my
> > ability to dig in to "tables" (i.e., read in a CSV and then explore
> > the data).
> >
> > I've seen Dan Bron mention perhaps putting together a wiki page about
> > this, but I thought maybe I could start the ball rolling here and
> > maybe we could put something together... together. I'm using the
> > baseball archive database as sample data since anyone can get at it
> > (2012 CSV data, it's an 8MB zip and I'm looking at Master.csv):
> > http://www.seanlahman.com/baseball-archive/statistics/
> >
> > I run off the rails pretty quickly. If I could get this type of stuff
> > done then I could double my usage of J day to day which would be a big
> > help in learning more. Here's my poor attempt:
> >
> > load 'tables/csv'
> >
> > t=. readcsv '/home/dan/Downloads/Master.csv'
> >
> >
> > NB. Let's see how many players are named Joe?
> >
> > NB. Hmm... first I need to know what the headers are
> >
> >
> > hdr=.0{t
> >
> >
> > NB. Ok. I want rows where nameGiven
> >
> > NB. is Joe (I won't worry about nicknames for
> >
> > NB. example purposes).
> >
> > NB. I can get a column like this:
> >
> > (<a:; 1) { t
> >
> >
> > NB. So if I can figure out the index of
> >
> > NB. nameGiven in hdr then I can select that
> >
> > NB. column, then do the same thing to get the "Joe's"
> >
> >
> > NB. Index of?
> >
> > 'nameGiven' i. hdr
> >
> >
> > NB. Nope, doesn't work. Looks like it treats
> >
> > NB. each letter as an item (I guess this is because
> >
> > NB. the shape of hdr is not e.g., rows x columns anymore)
> >
> >
> > NB. I could of course try the inverted table thing:
> >
> > ifa =: <@(>"1)@|:
> >
> > it=. ifa t
> >
> >
> > NB. Well, now my header row is split among the columns,
> >
> > NB. Ok let's just count with our fingers and try:
> >
> > 'Joe' i. 16 { it NB. 3
> >
> >
> > NB. ok. I'm confused enough to stop now.
> >
> >
> > Anyway, any help would be appreciated.
> > ----------------------------------------------------------------------
> > 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