Re: Finding and changing strings in a matrix
- To: mathgroup at smc.vnet.net
- Subject: [mg106770] Re: Finding and changing strings in a matrix
- From: "Sjoerd C. de Vries" <sjoerd.c.devries at gmail.com>
- Date: Sat, 23 Jan 2010 07:31:44 -0500 (EST)
- References: <hjbv9l$2qj$1@smc.vnet.net>
Hi Jagra, Pattern matching and replacement will do the trick: Transpose[ Transpose[ myData] //. {p : _?NumberQ .., x_?NumberQ, y_?StringQ, z___} :> {p, x, x, z}] The replacement is done on the columns, so that's why I used the Transpose first. After pattern matching Transpose is used again to restore them. Cheers -- Sjoerd On Jan 22, 12:39 pm, Jagra <jagra24... at mypacks.net> wrote: > Hi everyone! > > I have a matrix with {500, 20} dimensions. Some random positions in > each column have text strings in them instead of numbers. While it > can happen, the text strings do not typically appear across an entire > row of data. > > I need to find the text strings and replace them by the values > immediately above them. In the case where the matrix has consecutive > text strings I need to replace them with the first number above the > run of strings. > > Here's a part of the data file so you get the idea of what I start > with: > > myData ={{5217.61, 10163.8, 5844.44}, {5196.81, 10142.1, 5831.21}, > {5293.99, > 10183.5, 5930.53}, {5328.66, 10378., 5945.69}, {5372.38, "-", > 5957.44}, {5402.41, 10536.9, "-"}, {"-", 10494.7, "-"}, {"-", > 10634.2, 6002.92}, {5437.61, 10638.1, 6011.55}, {5397.86, 10546.4, > 5957.43}, {5412.88, "-", "-"}}; > > myData // MatrixForm > > I want to get rid of all "-"s and replace them with the numbers most > directly above them. > > I guess I could do this with loops, but that seems like a waste of > Mathematica's power. > > I've tried using Rest[myData] and Most[myData] then using Position to > identify where one of the matrices had strings and the other didn't > then using that to replace the strings in the original data. But I > run into a snag when I have consecutive strings. > > I hope someone can help. Cool forum, lots to learn! Thanks. > > Jagra