views:

71

answers:

1

When I try to remove the last row from a single column data frame, I get a vector back instead of a data frame:

> df = data.frame(a=1:10)
> df
    a
1   1
2   2
3   3
4   4
5   5
6   6
7   7
8   8
9   9
10 10

> df[-(length(df[,1])),]
[1] 1 2 3 4 5 6 7 8 9

The behavior I'm looking for is what happens when I use this command on a two-column data frame:

> df = data.frame(a=1:10,b=11:20)
> df
    a  b
1   1 11
2   2 12
3   3 13
4   4 14
5   5 15
6   6 16
7   7 17
8   8 18
9   9 19
10 10 20

> df[-(length(df[,1])),]
  a  b
1 1 11
2 2 12
3 3 13
4 4 14
5 5 15
6 6 16
7 7 17
8 8 18
9 9 19

My code is general, and I don't know a priori whether the data frame will contain one or many columns. Is there an easy workaround for this problem that will let me remove the last row no matter how many columns exist?

+6  A: 

Try adding the drop = FALSE option:

R> df[-(length(df[,1])), , drop = FALSE]
  a
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
brentonk
Perfect. Thanks.
chrisamiller