23

I have a data frame like this:
df = data.frame(a=1:3, b=2:4, c=3:5)

I am selecting columns from that data frame using something akin to:
df[, c(T, F, T)]

This works fine as long as there are at least two columns to be returned; but, if I do this for example:
df[, c(T, F, F)]

... I suddenly only get a vector instead of a data.frame.

Normally this would be fine (or even desired), but since I need the result to be a data.frame at a later point, this completely messes up my scripts.

Is there a way I can prevent R from doing this automatic conversion to a vector for single-column selections?

Adam Smith
  • 2,584
  • 2
  • 20
  • 34
Nils
  • 1,936
  • 3
  • 27
  • 42
  • do be careful with the `T`/`F` shortcuts for `TRUE`/`FALSE` -- if you ever happen to use `T` or `F` as a user-defined variable things can get very confusing ... – Ben Bolker Oct 09 '12 at 12:24

2 Answers2

46

This one is pretty simple. Append , drop = FALSE to your subsetting.

E.g.

df[, c(T, F, F), drop = FALSE]

Also works for matrices.

Fhnuzoag
  • 3,810
  • 2
  • 20
  • 16
1

Also without the comma, i.e. df[c(T,F,F)], returns a dataframe but it sounds like you have cases where the new dataframe can have one or more columns. So use the drop option abovee

Georgette
  • 11
  • 2