set.seed(123)
dat <-
data.frame(year_ref = 2000:2004,
www_val1 = sample(5),
www_val2 = sample(5),
www_val3 = sample(5),
sat_val1 = sample(5),
sat_val2 = sample(5),
sat_val3 = sample(5),
ds_val1 = sample(5),
ds_val2 = sample(5),
ds_val3 = sample(5))
I want to scale all columns whose names are provided in another vector. For eg. vector var_names has ds and sat, I want to scale all columns whose name starts with them
var_names <- c("ds", "sat")
library(dplyr)
dat %>%
dplyr::select(contains(var_names)) %>%
dplyr::mutate(scale(., center = T, scale = T))
However, this is creating new columns. Can I implement a solution like below so that I can make changes in the original dataframe only except that I do not want to hardcode column index
dat[, 5:10] <- apply(dat[, 5:10], 2, function(x) scale(x, center = T, scale = T))