Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I select and rename a long list of columns from a data frame in R?

Tags:

r

dplyr

I have a data set with many columns, I have to select a part of them and rename them to analyse occasionally. At moment I use select from package dplyr. But it was to complicated to do the setting every time for many attributes. Are there are better methods to do that?

For example, I use the data set mtcars

> head(mtcars)
                   mpg cyl disp  hp drat    wt  qsec vs am gear carb
Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1

I want to select the columns: mpg, cyl, and rename them as x,y

At moment I use:

> df <- mtcars %>% select(x=mpg, y=cyl)
> head(df)
                     x y
Mazda RX4         21.0 6
Mazda RX4 Wag     21.0 6
Datsun 710        22.8 4
Hornet 4 Drive    21.4 6
Hornet Sportabout 18.7 8
Valiant           18.1 6

It works, but it is cumbersome when I often change the parameters in the parenthesis. I wish to use a list to solve the problem, but it doesn't work.

For example I wish to create a attributes list to make it easy:

myselection <- c(
  x = mpg,
  y = cyl
)

df <- mtcars %>% select(myselection) # It is wrong!

But it is wrong, how can I make it work?

like image 890
xirururu Avatar asked Nov 25 '15 13:11

xirururu


1 Answers

You want non standard evalation (well technically, this is standard evaluation, and normal dplyr use is NSE), see vignette("nse"):

library(dplyr)

dots <- list(x="mpg", y="cyl")
select_(mtcars, .dots = dots)
like image 143
jeremycg Avatar answered Nov 10 '22 03:11

jeremycg