Often data you’re working with has abstract column names, such as (x1, x2, x3…). Typically, the first step I take when renaming columns with r is opening my web browser.

The dataset cars is data from the 1920s on “Speed and Stopping Distances of Cars”. There is only 2 columns shown below.

```
colnames(datasets::cars)
[1] "speed" "dist"
```

If we wanted to rename the column “dist” to make it easier to know what the data is/means we can do so in a few different ways.

## Using Base r:

```
colnames(cars)[2] <-"Stopping Distance (ft)"
[1] "speed" "Stopping Distance (ft)"
colnames(cars)[1:2] <-c("Speed (mph)","Stopping Distance (ft)")
[1] "Speed (mph)" "Stopping Distance (ft)"
```

```
Stopping_Over_60 <- subset(cars, dist > 60)
Stopping_Under_61 <- subset(cars, dist <= 60)
names(Stopping_Over_60)[2] <- names(Stopping_Under_61)[2] <- "Stopping Distance (ft)"
```

```
names(Stopping_Over_60)
[1] "speed" "Stopping Distance (ft)"
```

```
names(Stopping_Under_61)
[1] "speed" "Stopping Distance (ft)"
```

## Using dplyr:

```
cars %>%
rename("Stopping Distance (ft)" = dist) %>%
colnames()
[1] "speed" "Stopping Distance (ft)"
```

```
cars %>%
rename("Stopping Distance (ft)" = dist, "Speed (mph)" = speed) %>%
colnames()
[1] "Speed (mph)" "Stopping Distance (ft)"
```

## Using GREP:

```
colnames(cars)[grep("dist", colnames(cars))] <-"Stopping Distance (ft)"
"speed" "Stopping Distance (ft)"
```

## Using data.table

As mentioned in the comments below, using data.tables is a more efficient way of renaming columns in r due to the handling of memory. Memory is important as the data you start working with grows in size.

```
library(data.table)
cars_DT <- cars
cars_DT <-setDT(cars_DT)
# Note have to copy over to a new data structure due to cars being locked as its a dataset built into a package
setnames(cars_DT, c("speed","dist"), c("Speed (mph)","Stopping Distance (ft)"))
names(cars_DT)
[1] "Speed (mph)" "Stopping Distance (ft)"
```

I do recommend data.table::setnames()

Or after converting cars to data.table with `setDT(cars)`, you can do `setnames(cars, c(“dist”, “speed”), c(“Stopping Distance (ft)”, “Speed (mph)”))`. Immediate and without unnecessary copy in memory.

I guess there is a little typo in the result of first example of dplyr, and it should be:

“`

[1] “speed” “Stopping Distance (ft)”

“`

Thank you!

magrittr::set_colnames()