Hello I have this problem. I have a large matrix of this sort: > prova [,1] [,2] [,3] [,4] [1,] 3 3 3 3 [2,] 3 3 3 1 [3,] 1 3 3 3 [4,] 1 1 1 3 [5,] 3 1 1 3 [6,] 3 1 1 3 [7,] 1 3 1 3 [8,] 1 3 3 3 What I want to do is to count the number of sequences of ones and stack the results in a vector, which I will subsequently use to build an istogram (or a density) I mean: in the matrix "prova" I have two sequences of length two in column 1, one sequence of length three in column 2, one sequence of length four in column 3 and one sequence of length one in column 4. (I know I can actually turn the matrix into a vector by using rep(prova)) I would like to get to a vector such as : xx = [1,2,1,1] Can anyone help? Thanks! Mario ==============================Andrea Mario Lavezzi Dipartimento di Studi su Politica Diritto e Societ? Piazza Bologni 8 90134 Palermo tel. ++39 091 6625600 fax ++39 091 6112023 skype: lavezzimario email: lavezzi at unipa.it web: http://www.unipa.it/~lavezzi ===============================
On Thu, 2007-11-15 at 15:51 +0100, A M Lavezzi wrote:> Hello > > I have this problem. I have a large matrix of this sort: > > > prova > [,1] [,2] [,3] [,4] > [1,] 3 3 3 3 > [2,] 3 3 3 1 > [3,] 1 3 3 3 > [4,] 1 1 1 3 > [5,] 3 1 1 3 > [6,] 3 1 1 3 > [7,] 1 3 1 3 > [8,] 1 3 3 3 > > What I want to do is to count the number of > sequences of ones and stack the results in a > vector, which I will subsequently use to build an istogram (or a density) > > I mean: in the matrix "prova" I have two > sequences of length two in column 1, one sequence > of length three in column 2, one sequence of > length four in column 3 and one sequence of > length one in column 4. (I know I can actually > turn the matrix into a vector by using rep(prova)) > > I would like to get to a vector such as : xx = [1,2,1,1]I presume a typo above and that it should be: xx = [2,1,1,1] ? If so:> unlist(lapply(apply(prova, 2, rle),function(x) length(x$lengths[x$values == 1]))) [1] 2 1 1 1 See ?rle to get the basics of identifying runs of values. HTH, Marc Schwartz
Dear Marc thank you so much! One thing: writing xx=[1,2,1,1] is not a typo: I read it as the count of runs of different length starting from 1. In "prova" I have 1 run of length one, 2 runs of length two, 1 run of length three and 1 run of length four. Can I abuse of your time and ask how to do this? Thanks again Mario At 16.48 15/11/2007, you wrote:>On Thu, 2007-11-15 at 15:51 +0100, A M Lavezzi wrote: > > Hello > > > > I have this problem. I have a large matrix of this sort: > > > > > prova > > [,1] [,2] [,3] [,4] > > [1,] 3 3 3 3 > > [2,] 3 3 3 1 > > [3,] 1 3 3 3 > > [4,] 1 1 1 3 > > [5,] 3 1 1 3 > > [6,] 3 1 1 3 > > [7,] 1 3 1 3 > > [8,] 1 3 3 3 > > > > What I want to do is to count the number of > > sequences of ones and stack the results in a > > vector, which I will subsequently use to build an istogram (or a density) > > > > I mean: in the matrix "prova" I have two > > sequences of length two in column 1, one sequence > > of length three in column 2, one sequence of > > length four in column 3 and one sequence of > > length one in column 4. (I know I can actually > > turn the matrix into a vector by using rep(prova)) > > > > I would like to get to a vector such as : xx = [1,2,1,1] > >I presume a typo above and that it should be: > > xx = [2,1,1,1] > >? > >If so: > > > unlist(lapply(apply(prova, 2, rle), > function(x) length(x$lengths[x$values == 1]))) >[1] 2 1 1 1 > > >See ?rle to get the basics of identifying runs of values. > >HTH, > >Marc Schwartz==============================Andrea Mario Lavezzi Dipartimento di Studi su Politica Diritto e Societ? Piazza Bologni 8 90134 Palermo tel. ++39 091 6625600 fax ++39 091 6112023 skype: lavezzimario email: lavezzi at unipa.it web: http://www.unipa.it/~lavezzi ===============================