[R] Add number series to data frame

Sarah Goslee sarah.goslee at gmail.com
Tue Mar 6 18:00:35 CET 2012


Here's one possible approach. It assumes that a$name is a factor, as
it is in your example, but does not require that each sequence has a
unique value (see second example).

> a <- data.frame(name = c(rep("A", 3), rep("B", 5), rep("C", 10)))
> data.frame(name=a, val=unlist(sapply(rle(as.numeric(a[,1]))$lengths, function(x)seq(1, x, by=1))))
   name val
1     A   1
2     A   2
3     A   3
4     B   1
5     B   2
6     B   3
7     B   4
8     B   5
9     C   1
10    C   2
11    C   3
12    C   4
13    C   5
14    C   6
15    C   7
16    C   8
17    C   9
18    C  10
> b <- data.frame(name = c(rep("A", 3), rep("B", 5), rep("C", 10), rep("B", 3)))

> data.frame(name=b, val=unlist(sapply(rle(as.numeric(b[,1]))$lengths, function(x)seq(1, x, by=1))))
   name val
1     A   1
2     A   2
3     A   3
4     B   1
5     B   2
6     B   3
7     B   4
8     B   5
9     C   1
10    C   2
11    C   3
12    C   4
13    C   5
14    C   6
15    C   7
16    C   8
17    C   9
18    C  10
19    B   1
20    B   2
21    B   3

Sarah

On Tue, Mar 6, 2012 at 11:47 AM, syrvn <mentor_ at gmx.net> wrote:
> Hi,
>
> Is there a simple way of doing the following in R?
>
>
> a <- data.frame(name = c(rep("A", 3), rep("B", 5), rep("C", 10)))
>
>> a
>   name
> 1     A
> 2     A
> 3     A
> 4     B
> 5     B
> 6     B
> 7     B
> 8     B
> 9     C
> 10    C
> 11    C
> 12    C
> 13    C
> 14    C
> 15    C
> 16    C
> 17    C
> 18    C
>
> Do some fancy R code here:
>
>> a
>   name val
> 1     A  1
> 2     A  2
> 3     A  3
> 4     B  1
> 5     B  2
> 6     B  3
> 7     B  4
> 8     B  5
> 9     C  1
> 10    C  2
> 11    C  3
> 12    C  4
> 13    C  5
> 14    C  6
> 15    C  7
> 16    C  8
> 17    C  9
> 18    C  10
>
>

-- 
Sarah Goslee
http://www.functionaldiversity.org



More information about the R-help mailing list