split
seems to be appropriate here.
If you start with the following data frame :
df <- data.frame(ids=c(1,1,2,2,3),x=1:5,y=letters[1:5])
Then you can do :
split(df, df$ids)
And you will get a list of data frames :
R> split(df, df$ids)
$`1`
ids x y
1 1 1 a
2 1 2 b
$`2`
ids x y
3 2 3 c
4 2 4 d
$`3`
ids x y
5 3 5 e