PaulB
PaulB

Reputation: 319

updating variable names in R

I'm still learning some very basic concepts in R. I have an excel file that I import into R, but it has atrocious variable names. I have another file with 2 columns: the first is the original column names in my data file, the second is what I want the variable names to be.

What's the most efficient way to update all column names using this auxiliary file that I have?

Upvotes: 2

Views: 374

Answers (3)

r2evans
r2evans

Reputation: 160447

This method is a little overkill if all columns are perfectly accounted for and in the correct order. If there are columns out of order or new columns, however, this method is robust by only changing those you intend to change and are found.

mt <- mtcars
head(mt, 3)
#                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
namechange <- data.frame(oldname = c("mpg", "cyl", "hp"), newname = c("MPG", "CYL", "HP"))
namechange
#   oldname newname
# 1     mpg     MPG
# 2     cyl     CYL
# 3      hp      HP
ind <- match(names(mtcars), namechange$oldname)
ind
#  [1]  1  2 NA  3 NA NA NA NA NA NA NA
ifelse(is.na(ind), names(mt), namechange$newname[ind])
#  [1] "MPG"  "CYL"  "disp" "HP"   "drat" "wt"   "qsec" "vs"   "am"   "gear" "carb"
names(mt) <- ifelse(is.na(ind), names(mt), namechange$newname[ind])
head(mt, 3)
#                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

Upvotes: 2

wesleysc352
wesleysc352

Reputation: 617

you can use the rename command

 library(dplyr)
#Exemple with base mtcars

View(mtcars)

new_mtcars<-mtcars%>%
  rename('new_MPG'='mpg', 'new_cyl'='cyl')#Change the columns mpg and cyl

View(new_mtcars)

output

enter image description here

Upvotes: 0

Parfait
Parfait

Reputation: 107587

Since names or colnames of data frames is a character vector and every column in a data frame is an atomic vector, simply re-assign original with new names.

str(names_df)
# EXPECTED TWO COLUMNS OF CHR TYPE

# RE-ORDER COLUMNS BY PASSING CHARACTER VECTOR
excel_df <- excel_df[names_df$original_names]

# RE-ASSIGN NAMES: TWO METHODS
names(excel_df) <- names_df$new_names
excel_df <- setNames(excel_df, names_df$new_names)

Upvotes: 2

Related Questions