Subset Data Frame Variables in R

Your goal

You need to subset a data frame's variables in R.

Step-by-step tutorial

Simply apply the desired indices to the data frame. Here's an example using numerical indices:

> precip.df <- read.csv("precip-central-park.csv")
> head(precip.df)
  YEAR  JAN  FEB  MAR  APR  MAY  JUN  JUL  AUG  SEP  OCT  NOV  DEC ANNUAL
1 1869 2.53 6.87 4.61 1.39 4.15 4.40 3.20 1.76 2.81 6.48 2.03 5.02  45.25
2 1870 4.41 2.83 3.33 5.11 1.83 2.82 3.76 3.07 2.52 4.97 2.42 2.18  39.25
3 1871 2.07 2.72 5.54 3.03 4.04 7.05 5.57 5.60 2.34 7.50 3.56 2.24  51.26
4 1872 1.88 1.29 3.74 2.29 2.68 2.93 7.83 6.29 2.95 3.35 4.08 3.18  42.49
5 1873 5.34 3.80 2.09 4.16 3.69 1.28 4.61 9.56 3.14 2.73 4.63 2.96  47.99
6 1874 5.33 2.04 2.12 8.77 2.24 2.78 5.06 2.43 8.24 1.70 2.30 2.82  45.83
> precip.df[c(1, 2, 8)]
    YEAR   JAN   JUL
1   1869  2.53  3.20
2   1870  4.41  3.76
3   1871  2.07  5.57
4   1872  1.88  7.83
5   1873  5.34  4.61
6   1874  5.33  5.06
...

Alternatively, we can use the variable names:

> precip.df[c('YEAR', 'JAN', 'JUL')]
    YEAR   JAN   JUL
1   1869  2.53  3.20
2   1870  4.41  3.76
3   1871  2.07  5.57
4   1872  1.88  7.83
5   1873  5.34  4.61
6   1874  5.33  5.06
...

If you want a set of contiguous variables, you can use the colon operator to generate a range of indices:

> jan.jun.df <- precip.df[2:7]
> head(jan.jun.df)
   JAN  FEB  MAR  APR  MAY  JUN
1 2.53 6.87 4.61 1.39 4.15 4.40
2 4.41 2.83 3.33 5.11 1.83 2.82
3 2.07 2.72 5.54 3.03 4.04 7.05
4 1.88 1.29 3.74 2.29 2.68 2.93
5 5.34 3.80 2.09 4.16 3.69 1.28
6 5.33 2.04 2.12 8.77 2.24 2.78