Or, basically the same idea: example=: (<"0?5$100) 2 3 5}9 5$;:'xx'
updated=: (2+L:0]2 3 5{example) 2 3 5}example Or, if the rows being manipulated are truly identical, you could do it this way: updated=: (2+L:0]2{example) 2 3 5}example You could break the update into parts if you wanted -- first to extract the data and do the addition, and then to put the intermediate result into the larger dataset. (Note that L:0 is similar to &.> and in this case they do exactly the same thing.) I hope this helps, -- Raul On Tue, Feb 23, 2021 at 5:44 AM Ric Sherlock <tikk...@gmail.com> wrote: > > Hi Harvey, > Sounds like the data given might be quite a simplification from the > reality, but let's start with that for now. > > The following will subtract 12 from the boxed row of numbers in the > example. It assumes that the numeric values are numeric and not text. > > dat=: '|'&splitstring;._2 -.&' ' noun define > > aa | aa | aa | aa | aa > > 22 | 53 | 32 | 28 | 36 > > cc | cc | cc | cc | cc > > ) > > > load 'csv' NB. just to get the makenum verb which converts numeric text > representations to numbers. > > subtractFromNumericRow=: dyad define > > newrow=. (-&12)&.> x { y > > y=. newrow x}y > > ) > > 1 subtractFromNumericRow makenum dat > > +--+--+--+--+--+ > > |aa|aa|aa|aa|aa| > > +--+--+--+--+--+ > > |10|41|20|16|24| > > +--+--+--+--+--+ > > |cc|cc|cc|cc|cc| > > +--+--+--+--+--+ > > > If the boxes contain a textual representation of numbers then the following > will work (but will leave numbers in the boxes) > > > subtractFromTextRow=: dyad define > > newrow=. (12 -~ 0&".)&.> x { y > > y=. newrow x}y > > ) > > > 1 subtractFromTextRow dat > > +--+--+--+--+--+ > > |aa|aa|aa|aa|aa| > > +--+--+--+--+--+ > > |10|41|20|16|24| > > +--+--+--+--+--+ > > |cc|cc|cc|cc|cc| > > +--+--+--+--+--+ > > > If you need to leave the numbers as text, then that is possible too, but > I'll leave that for now. > > You could pass the constant to be subtracted as part of the x argument if > needed. > > > > On Tue, Feb 23, 2021 at 10:01 PM HH PackRat <hhpack...@gmail.com> wrote: > > > Hello again! > > > > I've run into another "stumper" (for me, at least). True amending > > (according to the Vocabulary) does not work for boxed data, and the > > examples under "AmendingBoxedStructures" do not seem to be the kind of > > solution I'm looking for. > > > > What I'm trying to do is something that any human can rather easily > > do, but which I'm finding very challenging to program in J. Below is > > a brief example of my issue with row E. There are many rows above E > > and many rows below E. (Sorry for the "A", but it was the closest > > that I could get to a similarly sized inverted "V".) All of the rows > > can actually have hundreds or thousands of column values, rather than > > just the 5 column values illustrated here. The row number for row E > > is known, as would be the number of boxed values in that row (there > > may be empty column values at the end of rows). E's kind of row is > > repeated ever so often in the actual table I'm working with, but the > > number of values could vary somewhat from one of these rows to another > > (that is, it is NOT a constant value, but that probably makes no > > difference whatsoever for the solution of this problem--I just want to > > alert you that you cannot count on a fixed value for all row lengths > > in terms of quantity--some rows may have empty values at the end). > > Just an assumption caution: the table contains *both* numeric and > > literal data, NOT numeric data only. > > > > A > > | > > | aa | aa | aa | aa | aa | > > | 22 | 53 | 32 | 28 | 36 | <--- row E > > | cc | cc | cc | cc | cc | > > | > > V > > > > Here's the problem: I want to subtract a constant value (say, 12) from > > each of the boxed values, so that row E will look like this: > > > > | 10 | 41 | 20 | 16 | 24 | > > > > The same principle would apply to all other similar rows, only each > > such row would have a different constant to subtract from all of the > > boxed values in the row. > > > > If each of these rows existed by themselves, I know how to do what I > > want. However, I cannot figure out how to do it in the middle of a > > table of boxed values, where the data comes from external sources and > > where the lengths of rows can vary. (The data in row E is > > astronomical data which is not strictly regular due to elliptical > > orbits rather than circular orbits, which is what leads to variations > > in speed.) > > > > The program I have written so far is what I thought was the more > > difficult part, and I thought the constant subtraction from values > > would be the easy part. However, it has proved to be the opposite > > because I'm stumped by this. > > > > I appreciate any help that you can give (I'm always learning new stuff > > in J!). The only thing I ask is that you please use EXPLICIT code and > > *not* tacit code. Thanks in advance! > > > > Harvey > > ---------------------------------------------------------------------- > > 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