Dear R-help, I am trying to have a generic way to assess the replicates in a character vector. Say that I have the following vector: x <- c('A','B','A','C','C','B') I would like to obtain: replicates <- c(1,1,2,1,2,2) each number beeing the time we see the corresponding value in x. Any clever and generic way to obtain that? Eric -- Eric Lecoutre Consultant - Business & Decision Business Intelligence & Customer Intelligence [[alternative HTML version deleted]]
Try this: replicate <- vector("numeric", len=length(x)) replicate[order(x)] <- unlist(sapply(rle(sort(x))$lengths, seq_len)) On 19/12/2007, Eric Lecoutre <ericlecoutre at gmail.com> wrote:> Dear R-help, > > I am trying to have a generic way to assess the replicates in a character > vector. > Say that I have the following vector: > > x <- c('A','B','A','C','C','B') > > I would like to obtain: > > replicates <- c(1,1,2,1,2,2) > > each number beeing the time we see the corresponding value in x. > > Any clever and generic way to obtain that? > > Eric > > > > > -- > Eric Lecoutre > Consultant - Business & Decision > Business Intelligence & Customer Intelligence > > [[alternative HTML version deleted]] > > ______________________________________________ > 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. >-- Henrique Dallazuanna Curitiba-Paran?-Brasil 25? 25' 40" S 49? 16' 22" O
Here is another way of doing it:> x <- c('A','B','A','C','C','B') > ave(rep(1, length(x)), x, FUN=cumsum)[1] 1 1 2 1 2 2>On Dec 19, 2007 5:36 AM, Eric Lecoutre <ericlecoutre at gmail.com> wrote:> Dear R-help, > > I am trying to have a generic way to assess the replicates in a character > vector. > Say that I have the following vector: > > x <- c('A','B','A','C','C','B') > > I would like to obtain: > > replicates <- c(1,1,2,1,2,2) > > each number beeing the time we see the corresponding value in x. > > Any clever and generic way to obtain that? > > Eric > > > > > -- > Eric Lecoutre > Consultant - Business & Decision > Business Intelligence & Customer Intelligence > > [[alternative HTML version deleted]] > > ______________________________________________ > 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. >-- Jim Holtman Cincinnati, OH +1 513 646 9390 What is the problem you are trying to solve?
You could do:> x <- c('A','B','A','C','C','B') > x[1] "A" "B" "A" "C" "C" "B"> mapply(function(i) sum(x[1:i] == x[i]),1:length(x))[1] 1 1 2 1 2 2>--- Eric Lecoutre <ericlecoutre at gmail.com> wrote:> Dear R-help, > > I am trying to have a generic way to assess the > replicates in a character > vector. > Say that I have the following vector: > > x <- c('A','B','A','C','C','B') > > I would like to obtain: > > replicates <- c(1,1,2,1,2,2) > > each number beeing the time we see the corresponding > value in x. > > Any clever and generic way to obtain that? > > Eric > > > > > -- > Eric Lecoutre > Consultant - Business & Decision > Business Intelligence & Customer Intelligence > > [[alternative HTML version deleted]] > > ______________________________________________ > 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. >