Assuming your data frame is already sorted (as appears to be the case here), you can just create your index vector (two methods that produce the same result, pick your favorite):
df[c(1:10, 90:99), ] # Include only begin and end
df[-c(11:89), ] # Exclude middle
c
just concatenates multiple vectors into one (index) vector. If a vector has negative values (and only negative values), then the rows that correspond to those values are omitted. And versions that work for arbitrary length data frames (with enough rows, of course):
df[-c(11:(nrow(df) - 10)), ]
df[c(1:10, (nrow(df) - 10):nrow(df)), ]
df[c(head(seq(len=nrow(df)), 10), tail(seq(len=nrow(df))), 10), ] # borrowing a bit from rawr