Search code examples
rr-factor

In R, how can I access the first element of each level of a factor?


I have a data frame like this:

n = c(2, 2, 3, 3, 4, 4) 
n <- as.factor(n)
s = c("a", "b", "c", "d", "e", "f") 
df = data.frame(n, s)  

df
  n s
1 2 a
2 2 b
3 3 c
4 3 d
5 4 e
6 4 f

and I want to access the first element of each level of my factor (and have in this example a vector containing a, c, e).

It is possible to reach the first element of one level, with

df$s[df$n == 2][1]

but it does not work for all levels:

df$s[df$n == levels(n)]
[1] a f

How would you do that?

And to go further, I’d like to modify my data frame to see which is the first element for each level at every occurrence. In my example, a new column should be:

  n s rep firstelement
1 2 a   a            a
2 2 b   c            a
3 3 c   e            c
4 3 d   a            c
5 4 e   c            e
6 4 f   e            e

Solution

  • the function ave is useful in these cases:

    df$firstelement = ave(df$s, df$n, FUN = function(x) x[1])
    df
      n s firstelement
    1 2 a            a
    2 2 b            a
    3 3 c            c
    4 3 d            c
    5 4 e            e
    6 4 f            e