|
[Date Index]
[Thread Index]
[Author Index]
Re: Transforming/expanding a list
- To: mathgroup at smc.vnet.net
- Subject: [mg127997] Re: Transforming/expanding a list
- From: Andrzej Kozlowski <akozlowski at gmail.com>
- Date: Sat, 8 Sep 2012 03:06:48 -0400 (EDT)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
- Delivered-to: l-mathgroup@wolfram.com
- Delivered-to: mathgroup-newout@smc.vnet.net
- Delivered-to: mathgroup-newsend@smc.vnet.net
- References: <20120906081415.0241D684C@smc.vnet.net>
On 6 Sep 2012, at 10:14, Mark Coleman <markspcoleman at gmail.com> wrote:
> I'm working on some Mathematica code that will help transform a large set of lists drawn from my company's legacy database systems. A typical row of the raw data looks like
>
> {x1,NULL,NULL,x2,NULL,NULL,NULL,NULL,x3,NULL,NULL,x4,x5,NULL} ...
>
> The lists are sequences of real numbers, separating some some number of Strings which for convenicence sake we call "NULL" (as opposed to a proper Mathematica Null). The goal is to create a new list where each NULL is replaced by the real number that most recently proceeds it (note that any number of NULLs may occur before or after any real values). I would like the code to return
>
> {x1,x1,x1,x2,x2,x2,x2,x2,x3,x3,x3,x4,x5,x5}
>
>
> Thanks
>
> Mark
>
How about something like this:
h[ls_] :=
Module[{u, g}, g[l_] /; VectorQ[l, NumberQ] := (u = Last[l];);
g[l_] /; Last[l] == NULL := l /. NULL -> u;
DeleteCases[Flatten[Map[g, Split[ls]]], Null]]
for example:
ls = {1, NULL, NULL, 2, NULL, NULL, NULL, NULL, 3, NULL, NULL, 4, 5,
NULL}
h[ls]
{1,1,2,2,2,2,3,3,5}
The way the code is written, it is essential that your x's are numbers, although one could easily change it to make it work with symbols.
Andrzej Kozlowski
Prev by Date:
Using code from nb. file in NetLink
Next by Date:
Re: Mathematica Prove[...] Command Possible?
Previous by thread:
Re: Transforming/expanding a list
Next by thread:
Re: Transforming/expanding a list
|