Re: Rearranging a data array containing calendrical as well as data entries.
- To: mathgroup at smc.vnet.net
- Subject: [mg54927] Re: Rearranging a data array containing calendrical as well as data entries.
- From: DrBob <drbob at bigfoot.com>
- Date: Sun, 6 Mar 2005 00:56:28 -0500 (EST)
- References: <20050305164826.HZQM3789.lakermmtao05.cox.net@boris>
- Reply-to: drbob at bigfoot.com
- Sender: owner-wri-mathgroup at wolfram.com
Ah! You're right, but the fix is simple. I thought each line had up to 7 data values (a week per line), but actually they have up to 8. Careless of me not to count them! Change 7 to 8 in dateValue, and that takes care of it. If the (max) table width is variable, on the other hand, we'd need different code. Bobby On Sat, 5 Mar 2005 10:48:16 -0600, Hans Michel <hmichel at cox.net> wrote: > Does not match. > > January has 31 days. > > The USGS data is well ordered. > > Hans > > "DrBob" <drbob at bigfoot.com> wrote in message > news:d09cct$d0a$1 at smc.vnet.net... >> Here's a start: >> >> rawData=Import["test.txt","Table"] >> >> > {{1999,1,1,489.82,489.82,495.01,495.01,495.01,495.01,495.01,490.51},{199 > 9,1,2, >> 490.51,490.51,490.51,490.51,490.38,490.38,490.38,490.38},{ >> >> > 1999,1,3,490.38,510.38,510.38,510.38,510.38,510.38,528.66,528.66},{1999, > 1,4, >> 528.66,528.66,528.66,501.68,501.68,501.68,501.68},{1999,2, >> >> > 1,501.68,496.44,496.44,496.44,496.44,496.44,478.72,478.72},{1999,2,2,478 > .72, >> 478.72,478.72,452.82,452.82,452.82,452.82,452.82},{1999,2, >> >> > 3,450.19,450.19,450.19,450.19,450.19,443.98,443.98,443.98},{1999,2,4,443 > .98, >> 443.98,440.14,440.14},{1999,3,1,440.14,440.14,440.14,453.64, >> >> > 453.64,453.64,453.64,453.64},{1999,3,2,503.98,503.98,503.98,503.98,503.9 > 8, >> 500.84,500.84,500.84},{1999,3,3,500.84,500.84,473.48,473.48, >> >> > 473.48,473.48,473.48,463.19},{1999,3,4,463.19,463.19,463.19,463.19,457.5 > 4, >> 457.54,457.54}} >> >> Clear[dateValue, month, twoDigit] >> twoDigit[i_Integer?Positive] := StringJoin @@ >> PadLeft[Characters@ToString@i, 2, "0"] >> month[i_Integer] /; 1 <= i <= 12 := month[i] = {"Jan", "Feb", "Mar", >> "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}[[i]] >> dateValue@{yr_, mo_, wk_, values___} := Transpose@{twoDigit[# + 7( >> wk - 1)] <> month@mo <> ToString@yr & /@ Range@Length@{values}, >> {values}} >> Flatten[dateValue /@ rawData, 1] >> >> {{"01Jan1999", 489.82}, >> {"02Jan1999", 489.82}, >> {"03Jan1999", 495.01}, >> {"04Jan1999", 495.01}, >> {"05Jan1999", 495.01}, >> {"06Jan1999", 495.01}, >> {"07Jan1999", 495.01}, >> {"08Jan1999", 490.51}, >> {"08Jan1999", 490.51}, >> {"09Jan1999", 490.51}, >> {"10Jan1999", 490.51}, >> {"11Jan1999", 490.51}, >> {"12Jan1999", 490.38}, >> {"13Jan1999", 490.38}, >> {"14Jan1999", 490.38}, >> {"15Jan1999", 490.38}, >> {"15Jan1999", 490.38}, >> {"16Jan1999", 510.38}, >> {"17Jan1999", 510.38}, >> {"18Jan1999", 510.38}, >> {"19Jan1999", 510.38}, >> {"20Jan1999", 510.38}, >> {"21Jan1999", 528.66}, >> {"22Jan1999", 528.66}, >> {"22Jan1999", 528.66}, >> {"23Jan1999", 528.66}, >> {"24Jan1999", 528.66}, >> {"25Jan1999", 501.68}, >> {"26Jan1999", 501.68}, >> {"27Jan1999", 501.68}, >> {"28Jan1999", 501.68}, >> {"01Feb1999", 501.68}, >> {"02Feb1999", 496.44}, >> {"03Feb1999", 496.44}, >> {"04Feb1999", 496.44}, >> {"05Feb1999", 496.44}, >> {"06Feb1999", 496.44}, >> {"07Feb1999", 478.72}, >> {"08Feb1999", 478.72}, >> {"08Feb1999", 478.72}, >> {"09Feb1999", 478.72}, >> {"10Feb1999", 478.72}, >> {"11Feb1999", 452.82}, >> {"12Feb1999", 452.82}, >> {"13Feb1999", 452.82}, >> {"14Feb1999", 452.82}, >> {"15Feb1999", 452.82}, >> {"15Feb1999", 450.19}, >> {"16Feb1999", 450.19}, >> {"17Feb1999", 450.19}, >> {"18Feb1999", 450.19}, >> {"19Feb1999", 450.19}, >> {"20Feb1999", 443.98}, >> {"21Feb1999", 443.98}, >> {"22Feb1999", 443.98}, >> {"22Feb1999", 443.98}, >> {"23Feb1999", 443.98}, >> {"24Feb1999", 440.14}, >> {"25Feb1999", 440.14}, >> {"01Mar1999", 440.14}, >> {"02Mar1999", 440.14}, >> {"03Mar1999", 440.14}, >> {"04Mar1999", 453.64}, >> {"05Mar1999", 453.64}, >> {"06Mar1999", 453.64}, >> {"07Mar1999", 453.64}, >> {"08Mar1999", 453.64}, >> {"08Mar1999", 503.98}, >> {"09Mar1999", 503.98}, >> {"10Mar1999", 503.98}, >> {"11Mar1999", 503.98}, >> {"12Mar1999", 503.98}, >> {"13Mar1999", 500.84}, >> {"14Mar1999", 500.84}, >> {"15Mar1999", 500.84}, >> {"15Mar1999", 500.84}, >> {"16Mar1999", 500.84}, >> {"17Mar1999", 473.48}, >> {"18Mar1999", 473.48}, >> {"19Mar1999", 473.48}, >> {"20Mar1999", 473.48}, >> {"21Mar1999", 473.48}, >> {"22Mar1999", 463.19}, >> {"22Mar1999", 463.19}, >> {"23Mar1999", 463.19}, >> {"24Mar1999", 463.19}, >> {"25Mar1999", 463.19}, >> {"26Mar1999", 457.54}, >> {"27Mar1999", 457.54}, >> {"28Mar1999", 457.54}} >> >> Bobby >> >> >> On Wed, 2 Mar 2005 22:29:16 -0500 (EST), Gilmar >> <gilmar.rodriguez at nwfwmd.state.fl.us> wrote: >> >>> Dear Mathematica User Friends: >>> >>> I have a file containing flow data from the USGS, in the following >>> format: >>> >>> 1999 1 1 489.82 489.82 495.01 495.01 495.01 495.01 495.01 490.51 >>> 1999 1 2 490.51 490.51 490.51 490.51 490.38 490.38 490.38 490.38 >>> 1999 1 3 490.38 510.38 510.38 510.38 510.38 510.38 528.66 528.66 >>> 1999 1 4 528.66 528.66 528.66 501.68 501.68 501.68 501.68 >>> 1999 2 1 501.68 496.44 496.44 496.44 496.44 496.44 478.72 478.72 >>> 1999 2 2 478.72 478.72 478.72 452.82 452.82 452.82 452.82 452.82 >>> 1999 2 3 450.19 450.19 450.19 450.19 450.19 443.98 443.98 443.98 >>> 1999 2 4 443.98 443.98 440.14 440.14 >>> 1999 3 1 440.14 440.14 440.14 453.64 453.64 453.64 453.64 453.64 >>> 1999 3 2 503.98 503.98 503.98 503.98 503.98 500.84 500.84 500.84 >>> 1999 3 3 500.84 500.84 473.48 473.48 473.48 473.48 473.48 463.19 >>> 1999 3 4 463.19 463.19 463.19 463.19 457.54 457.54 457.54 >>> >>> This format is used by the USGS to compress their data records. >>> >>> Each row contains: >>> Year, Month Number(1 to 12), Row Number (1 to 4), and data entries. >>> >>> The first row: >>> 1999 1 1 489.82 489.82 495.01 495.01 495.01 495.01 495.01 490.51 >>> contains flow values corresponding to: January 1 to January 8, >>> of the year 1999. >>> >>> The second row: >>> 1999 1 2 490.51 490.51 490.51 490.51 490.38 490.38 490.38 490.38 >>> contains flow values corresponding to: January 9 to January 16, >>> of the year 1999. >>> >>> The third row: >>> 1999 1 3 490.38 510.38 510.38 510.38 510.38 510.38 528.66 528.66 >>> contains flow values corresponding to: January 17 to January 24, >>> of the year 1999. >>> >>> The fourth row: >>> 1999 1 4 528.66 528.66 528.66 501.68 501.68 501.68 501.68 >>> contains flow values corresponding to: January 25 to January 31, >>> of the year 1999. >>> >>> I think that you get the picture of how this data set is assembled. >>> >>> What I need is a program that can turn the above mentioned horizontal >>> array, into a simple vertical array, containing two columns; >>> the first column contains the dates when the data was collected, >>> and the second column contains the flow values; i.e. >>> >>> 01Jan1999 489.82 >>> 02Jan1999 489.82 >>> 03Jan1999 495.01 >>> etc. >>> >>> If I give the program a starting date, and ending date for an >>> arbitrary record; the program should be able to allocate two >>> arrays to: >>> >>> (1.) put the dates between the starting date, and ending date, >>> to form the first column of the vertical array. >>> >>> (2.)match correctly those dates with the data to appear in >>> the second column of the vertical array. >>> >>> The program should discern between regular years, and leap >>> years. Those of you that are still using FORTRAN, and have >>> experienced how difficult it is to deal with date functions >>> using FORTRAN, might sympathize with my request. >>> >>> P.S. To get a larger set of USGS flow data to test your program >>> please download the following file: >>> >>> http://www.gilmarlily.netfirms.com/download/flow.dat >>> >>> Thank you for your help! >>> >>> >>> >>> >> >> >> >> -- >> DrBob at bigfoot.com >> www.eclecticdreams.net >> > > > > > -- DrBob at bigfoot.com www.eclecticdreams.net