An embedded and charset-unspecified text was scrubbed... Name: not available URL: <https://stat.ethz.ch/pipermail/r-help/attachments/20111027/787a647e/attachment.pl>
question R regarding consecutive numbers
6 messages · Samir Benzerfa, Duncan Murdoch, William Dunlap +1 more
On 27/10/2011 8:43 AM, Samir Benzerfa wrote:
Hi everyone Do you know about any possibility in R to check for consecutive numbers in vectors? That is, I do not only want to count the number of observations in total (which can be done table(x)), but I also want to count for instance how many times that vector contains a certain number consecutively. For example in the following vector x the number "1" appears 7 times. However, I want to check for instance how many times two consecutive 1's appear in the vector, which would actually be two times the case in the below vector.
x=c(1,1,3,4,9,1,9,1,5,4,5,2,1,1,1,6)
Any ideas for this issue?
How about this?
> runs <- rle(x)
> with(runs, table(values, lengths))
lengths
values 1 2 3
1 2 1 1
2 1 0 0
3 1 0 0
4 2 0 0
5 2 0 0
6 1 0 0
9 2 0 0
Duncan
On Oct 27, 2011, at 9:21 AM, Duncan Murdoch wrote:
On 27/10/2011 8:43 AM, Samir Benzerfa wrote:
Hi everyone Do you know about any possibility in R to check for consecutive numbers in vectors? That is, I do not only want to count the number of observations in total (which can be done table(x)), but I also want to count for instance how many times that vector contains a certain number consecutively. For example in the following vector x the number "1" appears 7 times. However, I want to check for instance how many times two consecutive 1's appear in the vector, which would actually be two times the case in the below vector.
x=c(1,1,3,4,9,1,9,1,5,4,5,2,1,1,1,6)
Any ideas for this issue?
How about this?
runs <- rle(x) with(runs, table(values, lengths))
And to go even a bit further, the table function returns a matrix which can be addressed to yield the specific answer requested: with(runs, table(values, lengths))["1",2] [1] 1 # m=number of exactly runs if length 2 > sum( tbl["1", 2:ncol(tbl)] ) [1] 2 # number of runs of length two or more.
David > > lengths > values 1 2 3 > 1 2 1 1 > 2 1 0 0 > 3 1 0 0 > 4 2 0 0 > 5 2 0 0 > 6 1 0 0 > 9 2 0 0 > > Duncan > > ______________________________________________ > R-help at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. David Winsemius, MD West Hartford, CT
In the general case, there is still a gap in your solution >sum( tbl["1", 2:ncol(tbl)] ). This solution refers to a specific column number (here: column number 2) and not to the actual length of the run, doesn't it? That is, in this simple example the column number 2 actually corresponds to the length "2", but this must not be the case in general. For instance if there is no run of length "2" but only of length "1" and "3", the column number 2 will refer to length "3" (try it with the new vector below). I realized this problem when applying your solution to a much more extended vector. So, the problem is that I would have to check manually whether the column number really corresponds to the length of runs. A possible solution would be to force R to show all the lengths from 1:ncol even if there is no run of some lengths in-between and just fill the whole column with zero's.
x=c(1,3,4,9,1,9,1,5,4,5,2,1,1,1,6)
Any ideas how to solve this problem? Cheers, S.B. -----Urspr?ngliche Nachricht----- Von: David Winsemius [mailto:dwinsemius at comcast.net] Gesendet: Donnerstag, 27. Oktober 2011 16:44 An: Duncan Murdoch Cc: Samir Benzerfa; r-help at r-project.org Betreff: Re: [R] question R regarding consecutive numbers
On Oct 27, 2011, at 9:21 AM, Duncan Murdoch wrote:
On 27/10/2011 8:43 AM, Samir Benzerfa wrote:
Hi everyone Do you know about any possibility in R to check for consecutive numbers in vectors? That is, I do not only want to count the number of observations in total (which can be done table(x)), but I also want to count for instance how many times that vector contains a certain number consecutively. For example in the following vector x the number "1" appears 7 times. However, I want to check for instance how many times two consecutive 1's appear in the vector, which would actually be two times the case in the below vector.
x=c(1,1,3,4,9,1,9,1,5,4,5,2,1,1,1,6)
Any ideas for this issue?
How about this?
runs <- rle(x) with(runs, table(values, lengths))
And to go even a bit further, the table function returns a matrix which can be addressed to yield the specific answer requested: with(runs, table(values, lengths))["1",2] [1] 1 # m=number of exactly runs if length 2 > sum( tbl["1", 2:ncol(tbl)] ) [1] 2 # number of runs of length two or more.
David > > lengths > values 1 2 3 > 1 2 1 1 > 2 1 0 0 > 3 1 0 0 > 4 2 0 0 > 5 2 0 0 > 6 1 0 0 > 9 2 0 0 > > Duncan > > ______________________________________________ > R-help at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. David Winsemius, MD West Hartford, CT
Are you looking for something like the following? ifactor()
is like factor but assumes that x is integral and that levels
should be {1, 2, ..., max(x)} with no gaps.
x <- c(1,3,4,9,1,9,1,5,4,5,2,1,1,1,6) ifactor <- function(x, levels=seq_len(max(0, x, na.rm=TRUE))) factor(x, levels=levels) with(rle(x), table(ifactor(values), ifactor(lengths)))
1 2 3 1 3 0 1 2 1 0 0 3 1 0 0 4 2 0 0 5 2 0 0 6 1 0 0 7 0 0 0 8 0 0 0 9 2 0 0 Also note that tbl["2","3"] does not mean the same as tbl[2,3], although if you use the ifactor function as above they will refer to the same element. Bill Dunlap Spotfire, TIBCO Software wdunlap tibco.com
-----Original Message----- From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On Behalf Of Samir Benzerfa Sent: Friday, October 28, 2011 12:35 AM To: 'David Winsemius'; 'Duncan Murdoch' Cc: r-help at r-project.org Subject: Re: [R] question R regarding consecutive numbers In the general case, there is still a gap in your solution >sum( tbl["1", 2:ncol(tbl)] ). This solution refers to a specific column number (here: column number 2) and not to the actual length of the run, doesn't it? That is, in this simple example the column number 2 actually corresponds to the length "2", but this must not be the case in general. For instance if there is no run of length "2" but only of length "1" and "3", the column number 2 will refer to length "3" (try it with the new vector below). I realized this problem when applying your solution to a much more extended vector. So, the problem is that I would have to check manually whether the column number really corresponds to the length of runs. A possible solution would be to force R to show all the lengths from 1:ncol even if there is no run of some lengths in-between and just fill the whole column with zero's.
x=c(1,3,4,9,1,9,1,5,4,5,2,1,1,1,6)
Any ideas how to solve this problem? Cheers, S.B. -----Urspr?ngliche Nachricht----- Von: David Winsemius [mailto:dwinsemius at comcast.net] Gesendet: Donnerstag, 27. Oktober 2011 16:44 An: Duncan Murdoch Cc: Samir Benzerfa; r-help at r-project.org Betreff: Re: [R] question R regarding consecutive numbers On Oct 27, 2011, at 9:21 AM, Duncan Murdoch wrote:
On 27/10/2011 8:43 AM, Samir Benzerfa wrote:
Hi everyone Do you know about any possibility in R to check for consecutive numbers in vectors? That is, I do not only want to count the number of observations in total (which can be done table(x)), but I also want to count for instance how many times that vector contains a certain number consecutively. For example in the following vector x the number "1" appears 7 times. However, I want to check for instance how many times two consecutive 1's appear in the vector, which would actually be two times the case in the below vector.
x=c(1,1,3,4,9,1,9,1,5,4,5,2,1,1,1,6)
Any ideas for this issue?
How about this?
runs <- rle(x) with(runs, table(values, lengths))
And to go even a bit further, the table function returns a matrix which can be addressed to yield the specific answer requested: with(runs, table(values, lengths))["1",2] [1] 1 # m=number of exactly runs if length 2
> sum( tbl["1", 2:ncol(tbl)] )
[1] 2 # number of runs of length two or more. -- David
lengths
values 1 2 3
1 2 1 1
2 1 0 0
3 1 0 0
4 2 0 0
5 2 0 0
6 1 0 0
9 2 0 0
Duncan
______________________________________________ R-help at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide
http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code. David Winsemius, MD West Hartford, CT ______________________________________________ R-help at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.
On Oct 28, 2011, at 11:26 AM, William Dunlap wrote:
Are you looking for something like the following? ifactor()
is like factor but assumes that x is integral and that levels
should be {1, 2, ..., max(x)} with no gaps.
x <- c(1,3,4,9,1,9,1,5,4,5,2,1,1,1,6) ifactor <- function(x, levels=seq_len(max(0, x, na.rm=TRUE))) factor(x, levels=levels) with(rle(x), table(ifactor(values), ifactor(lengths)))
1 2 3 1 3 0 1 2 1 0 0 3 1 0 0 4 2 0 0 5 2 0 0 6 1 0 0 7 0 0 0 8 0 0 0 9 2 0 0 Also note that tbl["2","3"] does not mean the same as tbl[2,3], although if you use the ifactor function as above they will refer to the same element. Bill Dunlap Spotfire, TIBCO Software wdunlap tibco.com
I answered earlier in a posting that did not get threaded properly in my mailer and this is a pr?cis: > xtbl <- with(rle(x), table(values, lengths)) > xtbl["1", which( as.numeric( attr(xtbl, "dimnames")$lengths) >=2 )] 3 5 1 1 Since character-numeric comparisons appear to get properly coerced the as numeric may not be necessary: > xtbl["1", which( attr(xtbl, "dimnames")$lengths >=2 )] 3 5 1 1
David. > >> -----Original Message----- >> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org >> ] On Behalf Of Samir Benzerfa >> Sent: Friday, October 28, 2011 12:35 AM >> To: 'David Winsemius'; 'Duncan Murdoch' >> Cc: r-help at r-project.org >> Subject: Re: [R] question R regarding consecutive numbers >> >> In the general case, there is still a gap in your solution >> >sum( tbl["1", >> 2:ncol(tbl)] ). This solution refers to a specific column number >> (here: >> column number 2) and not to the actual length of the run, doesn't >> it? That >> is, in this simple example the column number 2 actually corresponds >> to the >> length "2", but this must not be the case in general. For instance >> if there >> is no run of length "2" but only of length "1" and "3", the column >> number 2 >> will refer to length "3" (try it with the new vector below). I >> realized this >> problem when applying your solution to a much more extended vector. >> So, the >> problem is that I would have to check manually whether the column >> number >> really corresponds to the length of runs. A possible solution would >> be to >> force R to show all the lengths from 1:ncol even if there is no run >> of some >> lengths in-between and just fill the whole column with zero's. >> >>> x=c(1,3,4,9,1,9,1,5,4,5,2,1,1,1,6) >> >> Any ideas how to solve this problem? >> >> Cheers, S.B. >> >> >> -----Urspr?ngliche Nachricht----- >> Von: David Winsemius [mailto:dwinsemius at comcast.net] >> Gesendet: Donnerstag, 27. Oktober 2011 16:44 >> An: Duncan Murdoch >> Cc: Samir Benzerfa; r-help at r-project.org >> Betreff: Re: [R] question R regarding consecutive numbers >> >> >> On Oct 27, 2011, at 9:21 AM, Duncan Murdoch wrote: >> >>> On 27/10/2011 8:43 AM, Samir Benzerfa wrote: >>>> Hi everyone >>>> >>>> >>>> >>>> Do you know about any possibility in R to check for consecutive >>>> numbers in >>>> vectors? That is, I do not only want to count the number of >>>> observations in >>>> total (which can be done table(x)), but I also want to count for >>>> instance >>>> how many times that vector contains a certain number consecutively. >>>> >>>> >>>> >>>> For example in the following vector x the number "1" appears 7 >>>> times. >>>> However, I want to check for instance how many times two >>>> consecutive 1's >>>> appear in the vector, which would actually be two times the case in >>>> the >>>> below vector. >>>> >>>> >>>> >>>>> x=c(1,1,3,4,9,1,9,1,5,4,5,2,1,1,1,6) >>>> >>>> >>>> >>>> Any ideas for this issue? >>> >>> How about this? >>> >>>> runs <- rle(x) >>>> with(runs, table(values, lengths)) >> >> And to go even a bit further, the table function returns a matrix >> which can be addressed to yield the specific answer requested: >> >> with(runs, table(values, lengths))["1",2] >> [1] 1 # m=number of exactly runs if length 2 >>> sum( tbl["1", 2:ncol(tbl)] ) >> [1] 2 # number of runs of length two or more. >> >> >> -- >> David >> >>> >> >>> lengths >>> values 1 2 3 >>> 1 2 1 1 >>> 2 1 0 0 >>> 3 1 0 0 >>> 4 2 0 0 >>> 5 2 0 0 >>> 6 1 0 0 >>> 9 2 0 0 >>> >>> Duncan >>> >>> ______________________________________________ >>> R-help at r-project.org mailing list >>> https://stat.ethz.ch/mailman/listinfo/r-help >>> PLEASE do read the posting guide >> http://www.R-project.org/posting-guide.html >>> and provide commented, minimal, self-contained, reproducible code. >> >> David Winsemius, MD >> West Hartford, CT >> >> ______________________________________________ >> R-help at r-project.org mailing list >> https://stat.ethz.ch/mailman/listinfo/r-help >> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html >> and provide commented, minimal, self-contained, reproducible code. > > ______________________________________________ > R-help at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. David Winsemius, MD West Hartford, CT