In R, is it possible to extact the first 2 rows for each date, from a data.table?

I have a data.table dt. This data.table is sorted first by column date then by column age:

```library(data.table)
setkeyv(dt,c("date","age")) # Sorts table first by column "date" then by "age"
> dt
date age     name
1: 2000-01-01   3   Andrew
2: 2000-01-01   4      Ben
3: 2000-01-01   5  Charlie
5: 2000-01-02   7      Bob
6: 2000-01-02   8 Campbell
```

My question is: I am wondering if it's possible to extract the first 2 rows for each unique date?

In this example, the result in dt.f would be:

```> dt.f = ???????? # function of dt to extract the first 2 rows per unique date
> dt.f
date age   name
1: 2000-01-01   3 Andrew
2: 2000-01-01   4    Ben
4: 2000-01-02   7    Bob
```

p.s. Here is the code to create the aforementioned data.table:

```install.packages("data.table")
library(data.table)
date <- c("2000-01-01","2000-01-01","2000-01-01",
"2000-01-02","2000-01-02","2000-01-02")
age <- c(3,4,5,6,7,8)
dt <- data.table(date, age, name)
setkeyv(dt,c("date","age")) # Sorts table first by column "date" then by "age"
```

yep, just use .SD and index it as needed.

```  DT[, .SD[1:2], by=date]

date age   name
1: 2000-01-01   3 Andrew
2: 2000-01-01   4    Ben
4: 2000-01-02   7    Bob
```

Edited as per @eddi's suggestion.

@eddi's suggestion is spot on:

```  DT[DT[, .I[1:2], by = date]\$V1]

# using a slightly larger data set
> microbenchmark(SDstyle=DT[, .SD[1:2], by=date], IStyle=DT[DT[, .I[1:2], by = date]\$V1], times=200L)
Unit: milliseconds
expr       min        lq    median        uq      max neval
SDstyle 13.567070 16.224797 22.170302 24.239881 88.26719   200
IStyle  1.675185  2.018773  2.168818  2.269292 11.31072   200
```